[Rt-commit] rtir branch, 4.0.0-releng, updated. 3.3.0-183-g1d7f16c

Shawn Moore shawn at bestpractical.com
Thu May 26 18:35:12 EDT 2016


The branch, 4.0.0-releng has been updated
       via  1d7f16ce0a40f0372f3c5238dd3de7a02a60744a (commit)
       via  1ca060c756d6b5a6e14ebf7c8eac9497af0db27e (commit)
       via  792664a85c6f967fd41b2010d2ff41da6a55dc30 (commit)
       via  b02f99207708cc7acb06b43a90cb12d197ea2ead (commit)
      from  1ec9e40381d972e97508aeaa0ba5ff51eb4ed89d (commit)

Summary of changes:
 CHANGES                           | 278 +-----------
 MANIFEST                          |  21 +-
 META.yml                          |  10 +-
 inc/Module/AutoInstall.pm         |   4 +-
 inc/Module/Install.pm             |   6 +-
 inc/Module/Install/AutoInstall.pm |   2 +-
 inc/Module/Install/Base.pm        |   2 +-
 inc/Module/Install/Can.pm         |   2 +-
 inc/Module/Install/Fetch.pm       |   2 +-
 inc/Module/Install/Include.pm     |   2 +-
 inc/Module/Install/Makefile.pm    |   2 +-
 inc/Module/Install/Metadata.pm    |   2 +-
 inc/Module/Install/RTx.pm         |   2 +-
 inc/Module/Install/Win32.pm       |   2 +-
 inc/Module/Install/WriteAll.pm    |   2 +-
 inc/YAML/Tiny.pm                  |  29 +-
 inc/unicore/Name.pm               | 417 -----------------
 lib/RT/IR.pm                      |   2 +-
 po/README                         |  40 +-
 po/rtir.pot                       | 934 ++++++++++++++++++++++----------------
 20 files changed, 596 insertions(+), 1165 deletions(-)
 delete mode 100644 inc/unicore/Name.pm

- Log -----------------------------------------------------------------
commit b02f99207708cc7acb06b43a90cb12d197ea2ead
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Thu May 26 22:23:46 2016 +0000

    Clean out the CHANGES file that only contained old versions

diff --git a/CHANGES b/CHANGES
index ddea900..e945c66 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,279 +1,3 @@
-CHANGES IN 3.2.0
-----------------
-
 Going forward, changes to RTIR are documented in the UPGRADING
 documents and in the release notes that accompany each release. They
-are available at http://bestpractical.com/rtir/release-notes.html
-
-CHANGES IN 3.0.0
-----------------
-
-* RTIR 3.0 is primarily port over RT 4.0 and
-  clean up release. More than 2500 lines of
-  code were deleted, replaced with RT's modern
-  solutions.
-
-* Switched over lifecycles that replaced four RTIR's
-  State custom fields with RT's Status field. Database
-  grows slower, performance improvement, much less
-  magic. It's now possible to add new statuses and
-  customize workflow.
-
-* Switched over RT's IP custom fields implementation
-  that brings in IPv6.
-
-* New %RTIR_IncidentChildren option in the config that
-  allows admins to control whether incident required
-  or not when child created and if child can be linked
-  to more than one incident.
-
-* Made Incident field on Create/Split pages more flexible.
-  Users allowed to change value, enter multiple incidents
-  when it's allowed by config, pick particular incidents
-  on split, additional incidents' info displayed.
-
-* RTIR's SLA implementation have been dropped in favor
-  of RT::Extension::SLA.
-
-* Numerouse bug fixes.
-
-CHANGES IN 2.6.1
-----------------
-
-FEATURES
-========
-
-* allow local customization of research tools, see @RTIRResearchTools
-  in the config
-* new Iframe research tool, see $RTIRIframeResearchToolConfig
-* no longer do a whois lookup by default just by visiting the
-  lookup page
-
-CALLBACKS
-=========
-
-* LeftColumnStart and RightColumnStart in Incidents' Display.html
-
-BUGS
-====
-
-* order of tickets on 'RTIR at Glance' page could become incorrect
-  after using system for a while
-* on create incident page ids of HTML elements were repeated
-
-CLEANUPS
-========
-
-* code cleanups to better follow modern perl coding guidelines
-* config file is now has POD instead of comments and options are
-  in better ordered
-
-CHANGES IN 2.6.0 SINCE RTIR 2.4.x
----------------------------------
-
-FEATURES
-========
-
-* INCOMPATIBLE: prefix '_RTIR_' has been deleted from
-  all custom fields in RTIR. See UPGRADING for upgrade
-  instructions.
-* INCOMPATIBLE: New option %RTIR_CustomFieldDefaults
-  that replaces several $RTIR_*_default options that
-  were there before, don't forget to update config.
-* almost all default Custom Fields of RTIR now can be
-  disabled or un-applied. Read more in Administration
-  Tutorial.
-* IP CF can be changed to single value
-* On create with linking (a new child from an incident or a new
-  incident from a child) use default values for custom fields
-  from linked object
-* allow to use any custom field for lookup, not only IP,
-  no UI at the moment, but can be used via arguments of a URL
-  in clicky actions or linked CFs 
-* switch SimpleSearch over to the buttonless version
-* RTIR's SimpleSearch searches by IP in all queues if
-  query is an IP only
-* we have search in any RTIR's queue, so we need default
-  search format, new entry in $RTIRSearchResultFormats
-  config option
-* switched over RT's style for RTIR's query builder
-* RT::IR->OurQueue(...) method
-* RT::IR->CustomFields(...) method
-* refactored test suite for re-use in RTIR's extensions
-* described better Incident input field on Create pages
-
-BUGS
-====
-
-* Hide Launch links if user can not create an Inv
-* More...
-
-CALLBACKS
-=========
-
-* 'Init' callback in Create.html acting like /Ticket/Create.html
-* 'AfterRequestors' in several components
-* 'LeftColumnStart' and 'RightColumnStart' in Display.html
-
-CHANGES IN 2.4.5
-----------------
-
-BUGS
-====
-
-* respect per queue SubjectTag in templates. Read UPGRADING for
-  upgrade instructions.
-
-CLEANUPS
-========
-
-* In ScriptedActions add requestor when we call Create instead
-  of delaying it, so "on create" scrips notify requestors
-* Updated sample WHOIS servers
-* CSS to clean up the RTIR home page a bit
-
-CHANGES IN 2.4.4
-----------------
-
-BUGS
-====
-
-* compatibility fix for RT 3.8.8 and preserve compat with older
-  versions
-* apply transaction date search only if it's full text search,
-  otherwise it may slow down things
-* avoid showing zero values when CF value is not set
-* respect LinkValueTo for RTIR custom fields
-* fixes related to handling user's signatures
-    
-CHANGES IN 2.4.3
-----------------
-
-BUGS
-====
-* RTIR 2.4.2 had syntax error that was preventing server to start
-
-CHANGES IN 2.4.2
-----------------
-
-FEATURES
-========
-* use priority widget from RT 3.8.3 in RTIR
-
-BUGS
-====
-* don't set $$skip to zero in SkipTransaction callback as it may
-  conflict with other users of this callback. Just use return and
-  as well check asap if the txn is already skipped.
-* make proper overriding of WebNoAuthRegexp
-* recheck Constituency cache if $const is _none
-* adjust deserialization of IP from value with leading zeroes
-* RT::IR::States without Queue argument never worked properly
-* don't show modify user link if user can not modify the user
-
-CHANGES IN 2.4.1
-----------------
-
-FEATURES
-========
-* added 'Bookmark' action for tickets in RTIR, use 'Bookmarked Tickets'
-  portlet to see them on 'RTIR Home' page.
-* added 'Results' subtab to appendable tabs like Link Incident,
-  Link Children... This is interface people used to.
-* added subtab 'New Incident' to 'Link to an Incident from a child'
-  action, so people can jump away if they can not find suitable incident
-* added support for RTFM on Create in RTIR, needs RTFM 2.4.1rc1 with
-  RTFM_TicketCreate option enabled.
-
-BUGS
-====
-
-* we don't apply anymore RTIR's css files if it's not path of the RTIR
-* fixed simple search layout in web2 theme
-* moved 'bulk reject' link to the top right corner, like other
-  similar links in RT, for example 'Edit' or 'Graph'
-* dropped @results argument from Display.html, it's used by
-  new ListActions in RT 3.8. People could see random hex string in
-  the results box caused by this "bug"
-* applied HTML classes on some boxes to be on the same wave as RT.
-  Fixed some layouyt differences, box colors and other.
-* added paging to LinkChildren (adding a child to an incident)
-
-CHANGES IN 2.4.0 SINCE RTIR 1.0
--------------------------------
-
-Full integration with RT 3.8.
-
-New Search UI
-
-    This includes a 3.8-style search UI, and menu changes to
-    accomodate this.  Instead of search results and criteria being
-    displayed on a single page, you can now choose the 'Refine' menu
-    option to refine your search and re-run it after you've added all
-    of your criteria. This also includes extracting results to RSS and
-    spreadsheet formats.
-
-Configurable Search Results
-
-    Search result formats are configurable in the RTIR configuration
-    file, so you can easily choose which fields you would like to have
-    displayed for RTIR searches.
-
-Configurable RTIR home page
-
-    You can choose which components (portlets) you want to see on
-    RTIR's main page, including portlets from both RTIR and core RT.
-
-Per user interface configuration
-    
-    Users can change RT's appearance through their preferences,
-    including adjusting portlets, default search results, and ticket
-    transaction order.
-
-Integration between RTIR and RTFM
-
-    Now RTIR is detects if RTFM is installed, and adds default RTFM
-    classes, templates and rights for better integration with RTIR.
-
-Create Incident with Investigation
-
-    New interface allows the user to create an Incident and run an
-    Investigation from the same page..
-
-Incident Reports can be linked to multiple Incidents.
-
-Quick states filter
-
-    While browsing children linked to an incident you can filter the
-    list by the their state.
-
-Bulk Abandon
-
-    Multiple Incidents can be abandoned from a single form.
-
-Disable Blocks queue
-    
-    Blocks queue and its functionality can be disabled in the RTIR
-    configuration file.
-
-Advanced operations with RTIR tickets
-
-    New 'Advanced' ticket's subtab allows the user to move misplaced
-    tickets, merge wayward responses, and do other low-level
-    maintainance tasks.
-
-Business::SLA
-
-    Service Level Agreement (SLA) calculations are now handled by the
-    Business::SLA module, which offers more flexibility.  You can
-    specify SLAs with business minutes, real minutes, or both.
-
-Scrips
-
-    RTIR-specific scrip actions and conditions are now in perl
-    modules, so they're easier to customize.
-
-Standardized Components
-
-    RTIR 2.4 uses more of RT's core components, making it easier to
-    customize and maintain.
+are available at https://docs.bestpractical.com/release-notes/rtir

commit 792664a85c6f967fd41b2010d2ff41da6a55dc30
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Thu May 26 22:28:21 2016 +0000

    Refresh rtir.pot and update the README

diff --git a/po/README b/po/README
index c8e9167..daa4c38 100644
--- a/po/README
+++ b/po/README
@@ -3,37 +3,15 @@ of RTIR interfaces.
 
 po/rtir.pot is a template.
 
-To start a new translation, copy the template to po/<lang>.po
-where <lang> is your language, for example ru, pt, pt_BR
-or other.
+To start a new translation, copy the template to po/<lang>.po where <lang>
+is your language, for example ru, pt, pt_BR or other.
 
-There are currently no translations to any language, so you 
-may encounter some problems.
+There are currently no translations to any language, so you may encounter
+some problems.
 
-Some strings may be missing from the rtir.pot file.
-Two possible reasons:
-
-1) Template is out of date. 
-
-You can regenerate file using sbin/extract-message-catalog script
-from RT 3.8.2 or newer tarball. If you're still on 3.8.1 you can
-fetch this script from the repository:
-
-    wget http://code.bestpractical.com/bps-public/rt/3.8/trunk/sbin/extract-message-catalog
-
-Change directory to where you unpacked RTIR's sources and run:
-    
-    perl extract-message-catalog
-
-This command will scan all files and update the files in the po
-dir.
-
-2) String is not in .po even after manual update using above
-   command. 
-
-This may happen if a developer forgot to use loc function or /l
-mason component. Usually it's easy to fix. Find the string in the
-source, wrap it into call to the function or the component. You can
-find examples of using these all over the code. Then update message
-catalogs using the directions above.
+Some strings may be missing from the rtir.pot file.  This may happen if a
+developer forgot to use loc function or /l mason component. Usually it's
+easy to fix. Find the string in the source, wrap it into call to the
+function or the component. You can find examples of using these all over the
+code. Then update message catalogs using the directions above.
 
diff --git a/po/rtir.pot b/po/rtir.pot
index 55db718..ca7db19 100644
--- a/po/rtir.pot
+++ b/po/rtir.pot
@@ -1,100 +1,111 @@
-#
 msgid ""
 msgstr ""
-"Project-Id-Version: RTIR 2.4.x\n"
-"PO-Revision-Date: 2008-07-07 21:30+0200\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Project-Id-Version: RTIR 4.0.0\n"
+"PO-Revision-Date: 2016-07-07 21:30+0200\n"
+"Last-Translator: rt-devel <rt-deve at lists.bestpractical.com>\n"
 "Language-Team: rt-devel <rt-deve at lists.bestpractical.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: html/RTIR/Incident/Children/index.html:99
-#. ($id, $Incident->Subject)
-msgid "$Queue for Incident #%1: %2"
+#: html/RTIR/Investigation/Elements/Create:157
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of
+email addresses. These people <b>will</b> receive future updates.)"
 msgstr ""
 
-#: html/RTIR/Display.html:237 html/RTIR/Incident/Create.html:102 html/RTIR/Incident/Create.html:96
-#. ($Type, $ChildObj->Id, $ChildObj->Subject)
-#. ($Type, $SplitObj->Id, $SplitObj->Subject)
+#: html/RTIR/Investigation/Elements/Create:168
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative
+email addresses. These people <b>will</b> receive future updates.)"
+msgstr ""
+
+#. (RT::IR::TicketType(Lifecycle => $ChildObj->QueueObj->Lifecycle), $ChildObj->Id, $ChildObj->Subject)
 #. ($name, $Ticket->Id, $Ticket->Subject)
+#. (RT::IR::TicketType(Lifecycle => $SplitObj->QueueObj->Lifecycle), $SplitObj->Id, $SplitObj->Subject)
+#: html/RTIR/Display.html:281 html/RTIR/Incident/Create.html:104 html/RTIR/Incident/Create.html:99
 msgid "%1 #%2: %3"
 msgstr ""
 
-#: html/RTIR/Update.html:95
 #. ($m->scomp(                    '/Elements/ShowUser', User => $Ticket->OwnerObj                ))
+#: html/RTIR/Update.html:96
 msgid "%1 (Unchanged)"
 msgstr ""
 
-#: html/RTIR/Elements/ShowDates:79
 #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+#: html/RTIR/Elements/ShowDates:83
 msgid "%1 by %2"
 msgstr ""
 
-#: lib/RT/IR.pm:579
+#. (RT::IR::TicketType(Ticket=>$related_ticket), $related_constituency, $constituency)
+#: html/RTIR/Incident/Create.html:304
+msgid "%1 constituency '%2' does not match current constituency '%3'"
+msgstr ""
+
+#. (RT::IR::TicketType(Lifecycle => $Lifecycle),$id, $Incident->Subject)
+#: html/RTIR/Incident/Children/index.html:102
+msgid "%1 for Incident #%2: %3"
+msgstr ""
+
 #. ($email->format, $cu->loc($display))
+#: lib/RT/IR.pm:770
 msgid "%1 is an address RT receives mail at. Adding it as a '%2' would create a mail loop"
 msgstr ""
 
-#: html/RTIR/Display.html:82 html/RTIR/Incident/Display.html:85
 #. ($TimeWorked)
+#: html/RTIR/Display.html:93 html/RTIR/Incident/Display.html:104
 msgid "%1 min"
 msgstr ""
 
-#: html/RTIR/EditUsername:51
 #. ($User->EmailAddress)
+#: html/RTIR/EditUsername:51
 msgid "%1's name"
 msgstr ""
 
-#: html/RTIR/Elements/EditPeople:55
-msgid "(Check box to delete)"
+#. ($button_start, $button_end, $queue_selector)
+#: html/RTIR/Elements/CreateTicketInQueue:54
+msgid "%1New ticket in%2 %3"
 msgstr ""
 
-#: html/RTIR/Investigation/Elements/Create:131
-msgid ""
-"(Sends a carbon-copy of this update to a comma-delimited list of\n"
-"email addresses. These people <b>will</b> receive future updates.)"
-msgstr ""
-
-#: html/RTIR/Investigation/Elements/Create:142
-msgid ""
-"(Sends a carbon-copy of this update to a comma-delimited list of administrative\n"
-"email addresses. These people <b>will</b> receive future updates.)"
+#: html/RTIR/Elements/EditPeople:55
+msgid "(Check box to delete)"
 msgstr ""
 
-#: html/RTIR/Create.html:201
+#: html/RTIR/Create.html:255
 msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
 msgstr ""
 
-#: html/RTIR/Create.html:188
+#: html/RTIR/Create.html:242
 msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
 msgstr ""
 
 #: html/RTIR/Tools/Elements/LookupSummary:62
-msgid "(no $Queue)"
+msgid "(no $display_lifecycle)"
 msgstr ""
 
-#: html/RTIR/Elements/ShowIncidents:55
-msgid "(no Incidents)"
+#: html/RTIR/Elements/ShowIncidents:56
+msgid "(none)"
 msgstr ""
 
-#: html/RTIR/Link/Articles.html:66
-msgid "(no name)"
+#: etc/upgrade/2.1.1/content:10
+msgid "A block was activated or created in active state"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/ToolResultsIframe:48
-msgid "<%$research_tools->{$ResearchTool}->{FriendlyName}%>"
+#: etc/initialdata:233 etc/upgrade/1.1.1/content:80
+msgid "A closed ticket is reopened"
 msgstr ""
 
-#: etc/upgrade/2.1.1/content:10
-msgid "A block was activated or created in active state"
+#: etc/upgrade/2.1.0/content:114
+msgid "A group responsible for constituency must be changed"
 msgstr ""
 
-#: etc/initialdata:273 etc/upgrade/2.1.0/content:114
-msgid "A group responsible for constituency must be changed"
+#: etc/initialdata:227 etc/upgrade/1.1.1/content:75
+msgid "A ticket is rejected or resolved"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/GetEmailFromIP:51 html/RTIR/Tools/ScriptedAction.html:292
+#: etc/upgrade/1.1.1/content:85
+msgid "A ticket requires a state change"
+msgstr ""
+
+#: html/RTIR/Tools/Elements/GetEmailFromIP:51 html/RTIR/Tools/ScriptedAction.html:287
 msgid "ADDRESS_UNKNOWN"
 msgstr ""
 
@@ -102,8 +113,8 @@ msgstr ""
 msgid "Abandon"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:224
 #. ($id)
+#: html/RTIR/Incident/Reply/index.html:234
 msgid "Abandon Incident #%1 (including children)"
 msgstr ""
 
@@ -115,15 +126,11 @@ msgstr ""
 msgid "Abandon selected incidents"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Header/Default:49
-msgid "About RTIR"
-msgstr ""
-
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:151
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:169
 msgid "Actions"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:105
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:119
 msgid "Add IP"
 msgstr ""
 
@@ -131,41 +138,36 @@ msgstr ""
 msgid "Add new Correspondents"
 msgstr ""
 
-#: html/RTIR/Search/Elements/BuildQuery:68
+#: html/RTIR/Search/Elements/BuildQuery:73
 msgid "Add these terms"
 msgstr ""
 
-#: html/RTIR/Search/Elements/BuildQuery:69
+#: html/RTIR/Search/Elements/BuildQuery:74
 msgid "Add these terms and Search"
 msgstr ""
 
-#: html/RTIR/Create.html:537
-#. ($filename)
-msgid "Added attachment '%1'"
-msgstr ""
-
-#: html/RTIR/Tools/ScriptedAction.html:102
+#: html/RTIR/Tools/ScriptedAction.html:101
 msgid "Addresses"
 msgstr ""
 
-#: html/RTIR/Create.html:193 html/RTIR/Elements/EditPeople:79 html/RTIR/Investigation/Elements/Create:136
+#: html/RTIR/Create.html:247 html/RTIR/Elements/EditPeople:79 html/RTIR/Investigation/Elements/Create:162
 msgid "Admin Cc"
 msgstr ""
 
-#: html/RTIR/Elements/ShowPeople:69
+#: html/RTIR/Elements/ShowPeople:88
 msgid "AdminCc"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:198
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:216
 msgid "Advanced"
 msgstr ""
 
-#: html/RTIR/Advanced.html:140
 #. ($id)
+#: html/RTIR/Advanced.html:144
 msgid "Advanced edit $Type #%1"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:119
+#: html/RTIR/Tools/ScriptedAction.html:114
 msgid "Argument"
 msgstr ""
 
@@ -177,56 +179,62 @@ msgstr ""
 msgid "Attach Reports"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:316 html/Callbacks/RTIR/Elements/Tabs/Privileged:337 html/Callbacks/RTIR/Elements/Tabs/Privileged:359 html/Callbacks/RTIR/Elements/Tabs/Privileged:385 html/Callbacks/RTIR/Elements/Tabs/Privileged:503
-#. ($id)
-msgid "Back to ticket #%1"
+#. (lc RT::IR::TicketType(Lifecycle => $ticket->QueueObj->Lifecycle), $id)
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:543
+msgid "Back to  %1 #%2"
 msgstr ""
 
-#: html/RTIR/Create.html:488 html/RTIR/Create.html:83 html/RTIR/Investigation/Elements/Create:52
-msgid "Basics"
-msgstr ""
-
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:113
-msgid "Blocks"
+#. (lc RT::IR::TicketType( Lifecycle => $ticket->QueueObj->Lifecycle), $id)
+#. (lc RT::IR::TicketType(Lifecycle => $ticket->QueueObj->Lifecycle), $id)
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:356 html/Callbacks/RTIR/Elements/Tabs/Privileged:376 html/Callbacks/RTIR/Elements/Tabs/Privileged:398 html/Callbacks/RTIR/Elements/Tabs/Privileged:424
+msgid "Back to %1 #%2"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:96
-msgid "Blocks Correspondents"
-msgstr ""
-
-#: html/RTIR/Create.html:339 html/RTIR/Display.html:156 html/RTIR/Edit.html:168
-msgid "Blocks queue is disabled via config file"
+#: html/RTIR/Create.html:83 html/RTIR/Investigation/Elements/Create:52
+msgid "Basics"
 msgstr ""
 
 #: html/RTIR/Search/index.html:72
 msgid "Build Search"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:439
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:477
 msgid "Bulk Abandon"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:445 html/RTIR/Elements/NewReports:52
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:483 html/RTIR/Elements/NewReports:51
 msgid "Bulk Reject"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:125
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:143
 msgid "By Email address"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:126
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:144
 msgid "By IP address"
 msgstr ""
 
-#: html/RTIR/Create.html:180 html/RTIR/Elements/EditPeople:69 html/RTIR/Elements/ShowPeople:65 html/RTIR/Investigation/Elements/Create:125
+#: html/RTIR/Search/Reporting.html:89
+msgid "Calculate"
+msgstr ""
+
+#: html/RTIR/Search/Reporting.html:91
+msgid "Calculate values of"
+msgstr ""
+
+#: html/RTIR/Create.html:234 html/RTIR/Elements/EditPeople:69 html/RTIR/Elements/ShowPeople:84 html/RTIR/Investigation/Elements/Create:151
 msgid "Cc"
 msgstr ""
 
-#: etc/initialdata:197 etc/upgrade/1.1.1/content:38
+#: etc/initialdata:176 etc/upgrade/1.1.1/content:38
 msgid "Change the ownership of Incident's children"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:452
+#: etc/initialdata:180 etc/upgrade/1.1.1/content:42
+msgid "Change the ownership of the parent Incident"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:490
 msgid "Chart"
 msgstr ""
 
@@ -234,82 +242,85 @@ msgstr ""
 msgid "Check box to unlink"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:276
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:302
 msgid "Comment"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ReplyForm:58 html/RTIR/Update.html:70
+#: html/RTIR/Incident/Elements/ReplyForm:58 html/RTIR/Update.html:71
 msgid "Comments (Not sent to requestors)"
 msgstr ""
 
-#: html/RTIR/Create.html:128 html/RTIR/Edit.html:117 html/RTIR/Incident/Create.html:133 html/RTIR/Incident/Elements/Create:49 html/RTIR/Reporting/index.html:54
+#: html/RTIR/Display.html:71 html/RTIR/Incident/Create.html:93 html/RTIR/Incident/Display.html:69 html/RTIR/Investigation/Elements/Create:57 html/RTIR/Reporting/index.html:54
 msgid "Constituency"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:85
+#: html/RTIR/Tools/ScriptedAction.html:88
 msgid "Contact Field"
 msgstr ""
 
-#: html/RTIR/Create.html:165 html/RTIR/Elements/EditPeople:58 html/RTIR/Elements/ShowPeople:61 html/RTIR/Investigation/Elements/Create:117
+#: html/RTIR/Create.html:219 html/RTIR/Elements/EditPeople:58 html/RTIR/Elements/ShowPeople:80 html/RTIR/Investigation/Elements/Create:143
 msgid "Correspondents"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:263
 #. ($ip, $err)
+#: html/RTIR/Tools/ScriptedAction.html:258
 msgid "Couldn't get address for %1: %2"
 msgstr ""
 
-#: html/RTIR/Incident/Display.html:159
-msgid "Couldn't link tickets with different constituencies"
-msgstr ""
-
-#: html/RTIR/Create.html:378
 #. ($id)
+#: html/RTIR/Create.html:412
 msgid "Couldn't load incident #%1"
 msgstr ""
 
-#: html/RTIR/Incident/Display.html:202
+#: html/RTIR/Incident/Display.html:241
 msgid "Couldn't load queue."
 msgstr ""
 
-#: html/RTIR/Incident/Display.html:246
 #. ($id)
+#: html/RTIR/Incident/Display.html:285
 msgid "Couldn't load ticket #%1 for linking."
 msgstr ""
 
-#: html/RTIR/Incident/BulkAbandon.html:119 html/RTIR/Report/BulkReject.html:108
+#: html/RTIR/Incident/BulkAbandon.html:118 html/RTIR/Report/BulkReject.html:108
 msgid "Couldn't load ticket."
 msgstr ""
 
-#: html/RTIR/Forward.html:88 html/RTIR/GnuPG.html:71
-#. ($QuoteTransaction)
-#. ($id)
-msgid "Couldn't load transaction #%1"
-msgstr ""
-
-#: html/RTIR/Report/BulkReject.html:136
 #. ($msg)
+#: html/RTIR/Report/BulkReject.html:136
 msgid "Couldn't take ticket: %1"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:101 html/Callbacks/RTIR/Elements/Tabs/Privileged:116 html/Callbacks/RTIR/Elements/Tabs/Privileged:94 html/RTIR/Create.html:484 html/RTIR/Elements/ShowArticles:85 html/RTIR/Incident/Create.html:434 html/RTIR/Incident/Elements/ShowChildren:113 html/RTIR/Tools/Elements/LookupSummary:117 html/RTIR/Tools/Elements/LookupSummary:130 html/RTIR/Tools/ScriptedAction.html:173
-msgid "Create"
+#: html/RTIR/Incident/Reply/index.html:95
+msgid "Countermeasure Correspondents"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:272
-msgid "Create Incident and run Investigation"
+#: html/RTIR/Create.html:378 html/RTIR/Display.html:190 html/RTIR/Edit.html:178
+msgid "Countermeasure queues are disabled via config file"
 msgstr ""
 
-#: html/RTIR/Create.html:483
-#. ($name)
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:131
+msgid "Countermeasures"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:112 html/Callbacks/RTIR/Elements/Tabs/Privileged:119 html/Callbacks/RTIR/Elements/Tabs/Privileged:134 html/RTIR/Create.html:520 html/RTIR/Incident/Create.html:395 html/RTIR/Incident/Elements/ShowChildren:117 html/RTIR/Tools/Elements/LookupSummary:121 html/RTIR/Tools/Elements/LookupSummary:135 html/RTIR/Tools/ScriptedAction.html:168
+msgid "Create"
+msgstr ""
+
+#. (RT::IR::TicketType(Lifecycle => $QueueObj->Lifecycle))
+#: html/RTIR/Create.html:519
 msgid "Create a new %1"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:469
+#. ($ticket_type,      $m->scomp('/RTIR/Elements/SelectRTIRQueue',        Name => 'Queue',        Lifecycle => $Lifecycle,        ShowNullOption => 0,        LimitToConstituency => $limit_to_constituency,        Constituency => $m->{'RTIR_ConstituencyFilter'} || $linked_constituency))
+#: html/RTIR/Elements/CreateInRTIRQueueModal:63
+msgid "Create a new %1 in the queue %2"
+msgstr ""
+
+#: html/RTIR/Incident/Create.html:417
 msgid "Create a new Incident"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:173
+#: html/RTIR/Tools/ScriptedAction.html:168
 msgid "Create the Incidents and Investigations"
 msgstr ""
 
@@ -317,12 +328,12 @@ msgstr ""
 msgid "Created"
 msgstr ""
 
-#: html/RTIR/Create.html:471
+#: html/RTIR/Create.html:507
 msgid "Creation failed:"
 msgstr ""
 
-#: html/RTIR/Tools/Lookup.html:52
 #. ($TicketType, $ticket)
+#: html/RTIR/Tools/Lookup.html:54
 msgid "Current %1: #%2"
 msgstr ""
 
@@ -330,13 +341,13 @@ msgstr ""
 msgid "Current Correspondents"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/LookupSummary:54
 #. (loc($LookupType))
+#: html/RTIR/Tools/Elements/LookupSummary:55
 msgid "Custom field '%1' doesn't applies to this queue"
 msgstr ""
 
-#: html/RTIR/Prefs/Home.html:48
 #. (loc("RTIR home page"))
+#: html/RTIR/Prefs/Home.html:48
 msgid "Customize '%1'"
 msgstr ""
 
@@ -344,28 +355,27 @@ msgstr ""
 msgid "Date"
 msgstr ""
 
-#: html/RTIR/Create.html:267 html/RTIR/Display.html:103 html/RTIR/Edit.html:138 html/RTIR/Incident/Display.html:94 html/RTIR/Investigation/Elements/Create:83
+#: html/RTIR/Create.html:153 html/RTIR/Display.html:119 html/RTIR/Edit.html:144 html/RTIR/Incident/Display.html:118 html/RTIR/Investigation/Elements/Create:96
 msgid "Dates"
 msgstr ""
 
-#: html/RTIR/GnuPG.html:58
-msgid "Decrypt"
+#: html/RTIR/Incident/Create.html:192
+msgid "Details"
 msgstr ""
 
-#: html/RTIR/Create.html:522
-#. ($_)
-msgid "Deleted attachment '%1'"
+#: etc/initialdata:217 etc/upgrade/1.1.1/content:70
+msgid "Detect an external response"
 msgstr ""
 
-#: html/RTIR/Create.html:489 html/RTIR/Incident/Create.html:192
-msgid "Details"
+#: etc/initialdata:222 etc/upgrade/1.1.3/content:22
+msgid "Detect an internal response"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:153
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:171
 msgid "Display"
 msgstr ""
 
-#: html/RTIR/Create.html:174
+#: html/RTIR/Create.html:228
 msgid "Don't send any emails to correspondents."
 msgstr ""
 
@@ -373,7 +383,7 @@ msgstr ""
 msgid "Don't show search results"
 msgstr ""
 
-#: html/RTIR/Elements/EditDates:81 html/RTIR/Elements/ShowDates:64 html/RTIR/Investigation/Elements/Create:90
+#: html/RTIR/Elements/ShowDates:64 html/RTIR/Investigation/Elements/Create:103
 msgid "Due"
 msgstr ""
 
@@ -381,24 +391,24 @@ msgstr ""
 msgid "Due Incidents"
 msgstr ""
 
-#: etc/initialdata:487
+#: etc/initialdata:472
 msgid "Duty Team Members"
 msgstr ""
 
-#: etc/initialdata:493 etc/upgrade/2.1.0/content:82
+#: etc/upgrade/2.1.0/content:82
 msgid "Duty Team responsible for EDUNET constituency"
 msgstr ""
 
-#: etc/initialdata:499 etc/upgrade/2.1.0/content:88
+#: etc/upgrade/2.1.0/content:88
 msgid "Duty Team responsible for GOVNET constituency"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:194 html/Callbacks/RTIR/Elements/Tabs/Privileged:510 html/RTIR/ShowUser:55
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:212 html/Callbacks/RTIR/Elements/Tabs/Privileged:550 html/RTIR/ShowUser:55
 msgid "Edit"
 msgstr ""
 
-#: html/RTIR/Edit.html:49
 #. ($name, $Ticket->Id, $Ticket->Subject)
+#: html/RTIR/Edit.html:49
 msgid "Edit %1 #%2: %3"
 msgstr ""
 
@@ -406,7 +416,7 @@ msgstr ""
 msgid "Edit Links"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:305 html/Callbacks/RTIR/Elements/Tabs/Privileged:355 html/Callbacks/RTIR/Elements/Tabs/Privileged:381 html/Callbacks/RTIR/Elements/Tabs/Privileged:420 html/Callbacks/RTIR/Elements/Tabs/Privileged:83
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:101 html/Callbacks/RTIR/Elements/Tabs/Privileged:345 html/Callbacks/RTIR/Elements/Tabs/Privileged:394 html/Callbacks/RTIR/Elements/Tabs/Privileged:420 html/Callbacks/RTIR/Elements/Tabs/Privileged:458
 msgid "Edit Search"
 msgstr ""
 
@@ -418,29 +428,28 @@ msgstr ""
 msgid "Email"
 msgstr ""
 
-#: html/RTIR/GnuPG.html:58 html/RTIR/Investigation/Elements/Create:160
+#: html/RTIR/Investigation/Elements/Create:186
 msgid "Encrypt"
 msgstr ""
 
-#: html/RTIR/GnuPG.html:104
-#. ($id, $ticket->id)
-msgid "Encrypt/Decrypt transaction #%1 of ticket #%2"
-msgstr ""
-
-#: html/RTIR/Reporting/index.html:71
+#: html/RTIR/Reporting/index.html:70
 msgid "End Date:"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:53
+#: html/RTIR/Reporting/Report.html:59
 msgid "End date"
 msgstr ""
 
-#: html/RTIR/Elements/Refresh:59
 #. ($value/60)
+#: html/RTIR/Elements/Refresh:59
 msgid "Every %1 minutes"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:456
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:309
+msgid "Extract Article"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:494
 msgid "Feeds"
 msgstr ""
 
@@ -452,39 +461,35 @@ msgstr ""
 msgid "Final Priority"
 msgstr ""
 
-#: html/RTIR/Elements/EditPeople:91
+#: html/RTIR/Elements/EditPeople:108
 msgid "Find people whose"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:174
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:192
 msgid "First"
 msgstr ""
 
-#: html/RTIR/Forward.html:75
-msgid "Forward Message"
-msgstr ""
-
-#: html/RTIR/Forward.html:103
-msgid "Forward message"
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:256
+msgid "Forward"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:84
+#: html/RTIR/Reporting/index.html:83
 msgid "Generate a HTML report"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:78
+#: html/RTIR/Reporting/index.html:77
 msgid "Generate a delimited text report"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:89
+#: html/RTIR/Reporting/index.html:88
 msgid "Generate a spreadsheet report"
 msgstr ""
 
-#: html/RTIR/Search/Reporting.html:61 html/RTIR/Tools/Elements/ToolFormIframe:61 html/RTIR/Tools/Elements/ToolFormTraceroute:51 html/RTIR/Tools/Elements/ToolFormWhois:57
+#: html/RTIR/Elements/CreateInRTIRQueueModal:64 html/RTIR/Tools/Elements/ToolFormIframe:63 html/RTIR/Tools/Elements/ToolFormTraceroute:56 html/RTIR/Tools/Elements/ToolFormWhois:59
 msgid "Go"
 msgstr ""
 
-#: html/RTIR/Elements/EditPeople:93
+#: html/RTIR/Elements/EditPeople:110
 msgid "Go!"
 msgstr ""
 
@@ -492,15 +497,27 @@ msgstr ""
 msgid "Group"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:85
+#: html/RTIR/Search/Reporting.html:63
+msgid "Group by"
+msgstr ""
+
+#: html/RTIR/Search/Reporting.html:64
+msgid "Group tickets by"
+msgstr ""
+
+#: html/RTIR/Reporting/index.html:84
 msgid "HTML"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:90
+#: html/RTIR/Search/Reporting.html:108
+msgid "Height"
+msgstr ""
+
+#: html/RTIR/Tools/ScriptedAction.html:93
 msgid "IP Addresses"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:246
+#: html/RTIR/Tools/ScriptedAction.html:241
 msgid "IP_UNKNOWN"
 msgstr ""
 
@@ -508,60 +525,56 @@ msgstr ""
 msgid "Id of an Incident to link a new ticket to"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:74
+#: html/RTIR/Tools/ScriptedAction.html:75
 msgid "Identify Recipients"
 msgstr ""
 
-#: html/RTIR/Advanced.html:107 html/RTIR/Edit.html:154
+#: html/RTIR/Advanced.html:111 html/RTIR/Edit.html:160
 msgid "If you've updated anything above, be sure to"
 msgstr ""
 
-#: html/RTIR/Display.html:75 html/RTIR/Edit.html:98 html/RTIR/Elements/SelectIncident:49 html/RTIR/Incident/Create.html:441
+#: html/RTIR/Display.html:86 html/RTIR/Edit.html:111 html/RTIR/Elements/SelectIncident:49
 msgid "Incident"
 msgstr ""
 
-#: html/RTIR/Incident/Display.html:59
 #. ($id)
+#: html/RTIR/Incident/Display.html:60
 msgid "Incident #%1"
 msgstr ""
 
-#: html/RTIR/Create.html:387
-#. ($id, $inc->FirstCustomFieldValue('Constituency'))
-msgid "Incident #%1 has constituency %2, choose the same value for a new ticket or use another Incident"
-msgstr ""
-
-#: html/RTIR/Incident/Display.html:48
 #. ($id, $TicketObj->Subject)
+#: html/RTIR/Incident/Display.html:48
 msgid "Incident #%1: %2"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:227
 #. ($id)
+#: html/RTIR/Incident/Reply/index.html:237
 msgid "Incident #%1: Reply to All"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:229
 #. ($id)
+#: html/RTIR/Incident/Reply/index.html:239
 msgid "Incident #%1: Reply to Reporters"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:57
-msgid "Incident Report Summary (including unlinked Incident Reports)"
+#: html/RTIR/Reporting/Report.html:63
+msgid "Incident Report Summary"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:98
-msgid "Incident Reports"
+#: html/RTIR/Reporting/Report.html:67
+msgid "Incident Reports resolved during this period"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:61
-msgid "Incident Reports resolved during this period"
+#. ($incident_constituency, $constituency)
+#: html/RTIR/Create.html:420
+msgid "Incident constituency '%1' does not match current constituency '%2'"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:93
+#: html/RTIR/Reporting/Report.html:95
 msgid "Incident reports received"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:91
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:109
 msgid "Incidents"
 msgstr ""
 
@@ -569,27 +582,27 @@ msgstr ""
 msgid "Invalid search query"
 msgstr ""
 
-#: html/RTIR/Create.html:444 html/RTIR/Update.html:209
+#: html/RTIR/Create.html:480 html/RTIR/Update.html:222
 msgid "Invalid value(s) of the custom fields"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:340
+#: html/RTIR/Incident/Create.html:353
 msgid "Invalid value(s) of the custom fields:"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:143 html/RTIR/Tools/Elements/ToolResultsWhois:96
+#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:159 html/RTIR/Tools/Elements/ToolResultsWhois:102
 msgid "Investigate"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:137
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:164
 msgid "Investigate to"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/ToolResultsWhois:100 html/RTIR/Tools/Elements/ToolResultsWhois:95
+#: html/RTIR/Tools/Elements/ToolResultsWhois:101 html/RTIR/Tools/Elements/ToolResultsWhois:106
 msgid "Investigate to selected addresses"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/ToolResultsWhois:101
+#: html/RTIR/Tools/Elements/ToolResultsWhois:107
 msgid "Investigate using scripted action"
 msgstr ""
 
@@ -597,98 +610,110 @@ msgstr ""
 msgid "Investigation Correspondents"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:105
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:123
 msgid "Investigations"
 msgstr ""
 
-#: html/RTIR/Incident/BulkAbandon.html:125
+#: html/RTIR/Incident/BulkAbandon.html:124
 msgid "Is not incident."
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:188
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:206
 msgid "Last"
 msgstr ""
 
-#: html/RTIR/Elements/EditDates:71
-msgid "Last Contact"
-msgstr ""
-
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:108 html/RTIR/Create.html:481 html/RTIR/Incident/Elements/ShowChildren:113 html/RTIR/Tools/Elements/LookupSummary:108
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:126 html/RTIR/Create.html:517 html/RTIR/Incident/Elements/ShowChildren:117 html/RTIR/Tools/Elements/LookupSummary:111
 msgid "Launch"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:447 html/RTIR/Investigation/Elements/Create:111
+#: html/RTIR/Investigation/Elements/Create:137
 msgid "Launch Investigation"
 msgstr ""
 
-#: html/RTIR/Create.html:480
-#. ($name)
-msgid "Launch a new %1"
+#: html/RTIR/Create.html:516
+msgid "Launch a new investigation"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:101 html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:128 html/RTIR/Elements/ShowArticles:86 html/RTIR/Incident/Elements/ShowChildren:118 html/RTIR/Link/Articles.html:71 html/RTIR/Link/FromIncident/index.html:75 html/RTIR/Link/ToIncident/index.html:82 html/RTIR/Tools/Elements/LookupSummary:99
+#: html/Callbacks/RTIR/Search/Elements/PickBasics/Default:73
+msgid "Lifecycle"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:116 html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:143 html/RTIR/Incident/Elements/ShowChildren:123 html/RTIR/Link/FromIncident/index.html:74 html/RTIR/Link/ToIncident/index.html:81 html/RTIR/Tools/Elements/LookupSummary:102
 msgid "Link"
 msgstr ""
 
-#: html/RTIR/Link/ToIncident/index.html:93
 #. ($Type, $id)
+#: html/RTIR/Link/ToIncident/index.html:92
 msgid "Link %1 #%2 to selected Incident"
 msgstr ""
 
-#: html/RTIR/Link/FromIncident/index.html:95
-#. ($Type, $id)
-msgid "Link selected %1 to Incident #%2"
+#. ($child->id)
+#: html/RTIR/Incident/Display.html:202
+msgid "Link failed: Ticket #%1 is associated with a different constituency"
 msgstr ""
 
-#: html/RTIR/Link/Articles.html:78
-#. ($id)
-msgid "Link selected articles to Incident #%1"
+#. ($Type, $id)
+#: html/RTIR/Link/FromIncident/index.html:93
+msgid "Link selected %1 to Incident #%2"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:101
+#: html/RTIR/Incident/Create.html:103
 msgid "Link with"
 msgstr ""
 
-#: html/RTIR/Tools/Lookup.html:62
+#: html/RTIR/Tools/Lookup.html:72
 msgid "Look Up Information"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:122 html/RTIR/Tools/Lookup.html:90
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:140 html/RTIR/Tools/Lookup.html:102
 msgid "Lookup"
 msgstr ""
 
-#: html/RTIR/Tools/Lookup.html:90
 #. ($q)
+#: html/RTIR/Tools/Lookup.html:102
 msgid "Lookup '%1'"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:109 html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:136 html/Callbacks/RTIR/Elements/Tabs/Privileged:197 html/Callbacks/RTIR/Elements/Tabs/Privileged:351 html/RTIR/Merge/index.html:77
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:106
+msgid "Lookup IP"
+msgstr ""
+
+#: html/RTIR/Display.html:262 html/RTIR/Incident/Display.html:314
+msgid "Marked all messages as seen"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:124 html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:151 html/Callbacks/RTIR/Elements/Tabs/Privileged:215 html/Callbacks/RTIR/Elements/Tabs/Privileged:390 html/RTIR/Advanced.html:104 html/RTIR/Merge/index.html:77
 msgid "Merge"
 msgstr ""
 
-#: html/RTIR/Merge/index.html:143
-#. ($Type, $id, $Ticket->Subject)
+#. (RT::IR::TicketType( Ticket => $Ticket), $id, $Ticket->Subject)
+#: html/RTIR/Merge/index.html:147
 msgid "Merge %1 #%2: %3"
 msgstr ""
 
-#: html/RTIR/Merge/index.html:97
 #. ($MergeTicket->Id)
-msgid "Merge failed: Ticket #%1 is not the right type"
+#: html/RTIR/Merge/index.html:106
+msgid "Merge failed: Ticket #%1 is associated with a different constituency"
 msgstr ""
 
-#: html/RTIR/Merge/index.html:106
-msgid "Merge failed: Tickets have different constituencies"
+#. ($MergeTicket->Id)
+#: html/RTIR/Merge/index.html:97
+msgid "Merge failed: Ticket #%1 is not the right type"
 msgstr ""
 
 #: html/RTIR/Merge/index.html:77
 msgid "Merge into selected Ticket"
 msgstr ""
 
-#: html/RTIR/Create.html:217 html/RTIR/Elements/UpdateData:67 html/RTIR/Incident/Create.html:180 html/RTIR/Investigation/Elements/Create:168 html/RTIR/Tools/ScriptedAction.html:160 html/RTIR/Update.html:125
+#: etc/initialdata:200 etc/upgrade/2.3.9/content:3
+msgid "Merge multiple IPs on ticket merge"
+msgstr ""
+
+#: html/RTIR/Create.html:290 html/RTIR/Elements/UpdateData:67 html/RTIR/Incident/Create.html:180 html/RTIR/Investigation/Elements/Create:194 html/RTIR/Tools/ScriptedAction.html:155 html/RTIR/Update.html:140
 msgid "Message"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:133
+#: html/RTIR/Tools/ScriptedAction.html:128
 msgid "Message information"
 msgstr ""
 
@@ -696,18 +721,18 @@ msgstr ""
 msgid "More"
 msgstr ""
 
-#: html/RTIR/Elements/ShowChildren:80 html/RTIR/Incident/Elements/ShowChildren:125
 #. ($children->CountAll)
 #. ($total_count)
+#: html/RTIR/Elements/ShowChildren:83 html/RTIR/Incident/Elements/ShowChildren:130
 msgid "More... (%1 total)"
 msgstr ""
 
-#: html/RTIR/Elements/DueIncidents:85
+#: html/RTIR/Elements/DueIncidents:88
 msgid "Most due incidents"
 msgstr ""
 
-#: html/RTIR/Elements/UserDueIncidents:50
 #. ($Owner->Name)
+#: html/RTIR/Elements/UserDueIncidents:50
 msgid "Most due incidents owned by %1"
 msgstr ""
 
@@ -715,49 +740,50 @@ msgstr ""
 msgid "Most due unowned incidents"
 msgstr ""
 
-#: html/RTIR/Elements/Refresh:53 html/RTIR/Elements/ShowDates:79
+#: html/RTIR/Elements/Refresh:53 html/RTIR/Elements/ShowDates:83
 msgid "Never"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:309 html/Callbacks/RTIR/Elements/Tabs/Privileged:333
-msgid "New $type"
+#. (RT::IR::TicketType( Lifecycle => $lifecycle || RT::IR->lifecycle_incident ))
+#. (RT::IR::TicketType( Lifecycle => $lifecycle ))
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:349 html/Callbacks/RTIR/Elements/Tabs/Privileged:372
+msgid "New %1"
 msgstr ""
 
-#: html/RTIR/Elements/EditPeople:90
+#: html/RTIR/Elements/EditPeople:107
 msgid "New Correspondents"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:427 html/Callbacks/RTIR/Elements/Tabs/Privileged:76
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:465 html/Callbacks/RTIR/Elements/Tabs/Privileged:94
 msgid "New Search"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:382
-#. ($ChildObj->id)
-msgid "New incident and its child #%1 must have the same constituency"
-msgstr ""
-
-#: html/RTIR/Elements/NewReports:72
+#: html/RTIR/Elements/NewReports:70
 msgid "New unlinked Incident Reports..."
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:182
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:200
 msgid "Next"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ShowChildren:60
-#. (loc( $Queue ))
+#. (loc( $FriendlyLifecycle ))
+#: html/RTIR/Incident/Elements/ShowChildren:61
 msgid "No active %1"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ShowChildren:68
-#. (loc( $Queue ))
+#. (loc( $FriendlyLifecycle ))
+#: html/RTIR/Incident/Elements/ShowChildren:69
 msgid "No inactive %1"
 msgstr ""
 
-#: lib/RT/IR.pm:464
+#: lib/RT/IR.pm:647
 msgid "No whois servers configured"
 msgstr ""
 
+#: etc/initialdata:184 etc/upgrade/1.1.1/content:46
+msgid "Open the parent Incident when a child reopens"
+msgstr ""
+
 #: html/RTIR/Elements/SelectIncident:82
 msgid "Optional"
 msgstr ""
@@ -770,16 +796,16 @@ msgstr ""
 msgid "Other"
 msgstr ""
 
-#: html/RTIR/Merge/index.html:62
 #. ($id)
+#: html/RTIR/Merge/index.html:62
 msgid "Other children of the parent incident(s) of #%1"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:59
+#: html/RTIR/Reporting/Report.html:65
 msgid "Outstanding reports at the beginning of this period"
 msgstr ""
 
-#: html/RTIR/Edit.html:90 html/RTIR/Elements/ShowPeople:53 html/RTIR/Incident/Create.html:117 html/RTIR/Incident/Display.html:72 html/RTIR/Incident/Elements/ReplyForm:81 html/RTIR/Investigation/Elements/Create:56 html/RTIR/Tools/ScriptedAction.html:138
+#: html/RTIR/Edit.html:90 html/RTIR/Elements/ShowPeople:53 html/RTIR/Incident/Create.html:129 html/RTIR/Incident/Display.html:91 html/RTIR/Incident/Elements/ReplyForm:81 html/RTIR/Investigation/Elements/Create:69 html/RTIR/Tools/ScriptedAction.html:133
 msgid "Owner"
 msgstr ""
 
@@ -787,39 +813,54 @@ msgstr ""
 msgid "Owner is"
 msgstr ""
 
-#: html/RTIR/Display.html:97 html/RTIR/Edit.html:148
+#: html/RTIR/Display.html:113 html/RTIR/Edit.html:154
 msgid "People"
 msgstr ""
 
-#: html/RTIR/Forward.html:81
-msgid "Permission denied"
+#: html/RTIR/Search/Reporting.html:103
+msgid "Picture"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:168
+#. ($pane)
+#: html/RTIR/Prefs/Home.html:119
+msgid "Preferences saved for %1."
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:186
 msgid "Prev"
 msgstr ""
 
-#: html/RTIR/Advanced.html:90 html/RTIR/Edit.html:111 html/RTIR/Elements/PickRestriction:70 html/RTIR/Incident/Display.html:80
+#: html/RTIR/Advanced.html:90 html/RTIR/Edit.html:124 html/RTIR/Elements/PickRestriction:70 html/RTIR/Incident/Display.html:99
 msgid "Priority"
 msgstr ""
 
-#: html/RTIR/Advanced.html:63
+#: html/RTIR/Advanced.html:63 html/RTIR/Edit.html:97 html/RTIR/Incident/Create.html:109 html/RTIR/Incident/Display.html:79 html/RTIR/Investigation/Elements/Create:62
 msgid "Queue"
 msgstr ""
 
-#: html/RTIR/Create.html:334 html/RTIR/Display.html:149 html/RTIR/Incident/Create.html:309
+#. ($ARGS{Queue})
+#. ($Queue)
+#: html/RTIR/Create.html:366 html/RTIR/Incident/Create.html:316
+msgid "Queue '%1' could not be loaded."
+msgstr ""
+
+#: html/RTIR/Display.html:179
 msgid "Queue could not be loaded."
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:473
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:511
 msgid "RSS"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:73
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:84
+msgid "RT"
+msgstr ""
+
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:51 html/Callbacks/RTIR/Elements/Tabs/Privileged:93
 msgid "RTIR"
 msgstr ""
 
-#: etc/initialdata:232 etc/upgrade/2.9.0/content:27
+#: etc/initialdata:203 etc/upgrade/2.9.0/content:27
 msgid "RTIR Activate Ticket"
 msgstr ""
 
@@ -827,56 +868,60 @@ msgstr ""
 msgid "RTIR Block Activation"
 msgstr ""
 
-#: etc/initialdata:196 etc/upgrade/1.1.1/content:37
+#: etc/initialdata:175 etc/upgrade/1.1.1/content:37
 msgid "RTIR Change Child Ownership"
 msgstr ""
 
-#: etc/initialdata:200 etc/upgrade/1.1.1/content:41
+#: etc/initialdata:179 etc/upgrade/1.1.1/content:41
 msgid "RTIR Change Parent Ownership"
 msgstr ""
 
-#: etc/initialdata:250 etc/upgrade/1.1.1/content:74
+#: etc/initialdata:226 etc/upgrade/1.1.1/content:74
 msgid "RTIR Close Ticket"
 msgstr ""
 
-#: etc/initialdata:240 etc/upgrade/1.1.1/content:69
+#: etc/initialdata:216 etc/upgrade/1.1.1/content:69
 msgid "RTIR Customer Response"
 msgstr ""
 
-#: etc/initialdata:277 etc/upgrade/2.1.1/content:14
+#: etc/initialdata:244 etc/upgrade/2.1.1/content:14
 msgid "RTIR Linking To Incident"
 msgstr ""
 
-#: etc/initialdata:282 etc/upgrade/2.3.9/content:9
+#: etc/initialdata:251 etc/upgrade/2.3.9/content:9
 msgid "RTIR Merge"
 msgstr ""
 
-#: etc/initialdata:204 etc/upgrade/1.1.1/content:45
+#: etc/initialdata:183 etc/upgrade/1.1.1/content:45
 msgid "RTIR Open Parent"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:49
+#: html/RTIR/Reporting/Report.html:53
+msgid "RTIR Periodic Report"
+msgstr ""
+
 #. ($Constituency)
+#: html/RTIR/Reporting/Report.html:50
 msgid "RTIR Periodic Report for %1"
 msgstr ""
 
-#: etc/initialdata:256 etc/upgrade/1.1.1/content:79
+#: etc/initialdata:232 etc/upgrade/1.1.1/content:79
 msgid "RTIR Reopen Ticket"
 msgstr ""
 
-#: etc/initialdata:267 etc/upgrade/2.1.0/content:108
+#: etc/upgrade/2.1.0/content:108
 msgid "RTIR Require Constituency Change"
 msgstr ""
 
-#: etc/initialdata:272 etc/upgrade/2.1.0/content:113
+#: etc/upgrade/2.1.0/content:113
 msgid "RTIR Require Constituency Group Change"
 msgstr ""
 
-#: etc/initialdata:262 etc/upgrade/1.1.3/content:16
+#: etc/initialdata:238 etc/upgrade/1.1.3/content:16
 msgid "RTIR Require Due Change"
 msgstr ""
 
-#: etc/initialdata:287 etc/upgrade/2.9.0/content:15
+#: etc/initialdata:256 etc/upgrade/2.9.0/content:15
 msgid "RTIR Require IRs Activation"
 msgstr ""
 
@@ -884,7 +929,7 @@ msgstr ""
 msgid "RTIR Require State Change"
 msgstr ""
 
-#: etc/initialdata:192 etc/upgrade/1.1.1/content:33
+#: etc/initialdata:171 etc/upgrade/1.1.1/content:33
 msgid "RTIR Resolve Children"
 msgstr ""
 
@@ -892,18 +937,22 @@ msgstr ""
 msgid "RTIR Set Block State"
 msgstr ""
 
-#: etc/initialdata:208 etc/upgrade/2.9.0/content:23
+#: etc/upgrade/2.9.0/content:23
 msgid "RTIR Set Block Status"
 msgstr ""
 
-#: etc/initialdata:224 etc/upgrade/2.1.0/content:97
+#: etc/upgrade/2.1.0/content:97
 msgid "RTIR Set Constituency"
 msgstr ""
 
-#: etc/initialdata:228 etc/upgrade/2.1.0/content:101
+#: etc/upgrade/2.1.0/content:101
 msgid "RTIR Set Constituency Group"
 msgstr ""
 
+#: etc/initialdata:187
+msgid "RTIR Set Countermeasure Status"
+msgstr ""
+
 #: etc/upgrade/1.1.1/content:17
 msgid "RTIR Set Due Correspond"
 msgstr ""
@@ -920,11 +969,11 @@ msgstr ""
 msgid "RTIR Set Due to Now"
 msgstr ""
 
-#: etc/initialdata:188 etc/upgrade/1.1.1/content:29
+#: etc/initialdata:167 etc/upgrade/1.1.1/content:29
 msgid "RTIR Set How Reported"
 msgstr ""
 
-#: etc/initialdata:184 etc/upgrade/1.1.3/content:3
+#: etc/initialdata:163 etc/upgrade/1.1.3/content:3
 msgid "RTIR Set Incident Due"
 msgstr ""
 
@@ -932,7 +981,7 @@ msgstr ""
 msgid "RTIR Set Incident Report State"
 msgstr ""
 
-#: etc/initialdata:212 etc/upgrade/1.9.0/content:410
+#: etc/initialdata:191 etc/upgrade/1.9.0/content:410
 msgid "RTIR Set Incident Resolution"
 msgstr ""
 
@@ -956,7 +1005,7 @@ msgstr ""
 msgid "RTIR Set Starts to Now"
 msgstr ""
 
-#: etc/initialdata:245 etc/upgrade/1.1.3/content:21
+#: etc/initialdata:221 etc/upgrade/1.1.3/content:21
 msgid "RTIR Staff Response"
 msgstr ""
 
@@ -968,23 +1017,22 @@ msgstr ""
 msgid "RTIR Unset Due"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:513 html/RTIR/Prefs/Home.html:55
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:553 html/RTIR/Prefs/Home.html:54
 msgid "RTIR at a glance"
 msgstr ""
 
-#: html/RTIR/Elements/Header:50
-#. (RT->Config->Get('rtirname'))
-msgid "RTIR for %1"
-msgstr ""
-
-#: etc/initialdata:220 etc/upgrade/2.3.9/content:2
+#: etc/initialdata:199 etc/upgrade/2.3.9/content:2
 msgid "RTIR merge IPs"
 msgstr ""
 
-#: etc/initialdata:216 etc/upgrade/2.1.0/content:93
+#: etc/initialdata:195 etc/upgrade/2.1.0/content:93
 msgid "RTIR parse message for IPs"
 msgstr ""
 
+#: html/RTIR/Update.html:120
+msgid "Recipients"
+msgstr ""
+
 #: html/RTIR/Search/Elements/RefinePage:73
 msgid "Refine Search"
 msgstr ""
@@ -1013,15 +1061,15 @@ msgstr ""
 msgid "Reject selected incident reports and return to reports list"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:227 html/Callbacks/RTIR/Elements/Tabs/Privileged:377
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:249 html/Callbacks/RTIR/Elements/Tabs/Privileged:416
 msgid "Reply"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:222
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:244
 msgid "Reply to All"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:218
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:240
 msgid "Reply to Reporters"
 msgstr ""
 
@@ -1033,23 +1081,27 @@ msgstr ""
 msgid "Reply to all reports"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ReplyForm:119
+#: html/RTIR/Incident/Elements/ReplyForm:114
 msgid "Reply to selected tickets"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:434
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:472
 msgid "Report"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:68
+#: html/RTIR/Incident/Reply/index.html:69
 msgid "Reporters"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:123 html/RTIR/Reporting/index.html:119 html/RTIR/Search/Reporting.html:72
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:141 html/RTIR/Reporting/index.html:118 html/RTIR/Search/Reporting.html:122
 msgid "Reporting"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:62
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:116
+msgid "Reports"
+msgstr ""
+
+#: html/RTIR/Reporting/Report.html:68
 msgid "Reports unresolved at the end of the period"
 msgstr ""
 
@@ -1061,7 +1113,7 @@ msgstr ""
 msgid "Required"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/ToolFormIframe:52
+#: html/RTIR/Tools/Elements/ToolFormIframe:49
 msgid "Research Tool"
 msgstr ""
 
@@ -1069,16 +1121,16 @@ msgstr ""
 msgid "Resolution"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:222
 #. ($id)
+#: html/RTIR/Incident/Reply/index.html:232
 msgid "Resolve Incident #%1 (including children)"
 msgstr ""
 
-#: etc/initialdata:193 etc/upgrade/1.1.1/content:34
+#: etc/initialdata:172 etc/upgrade/1.1.1/content:34
 msgid "Resolve an Incident's children"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ReplyForm:61 html/RTIR/Update.html:73
+#: html/RTIR/Incident/Elements/ReplyForm:61 html/RTIR/Update.html:74
 msgid "Response to requestors"
 msgstr ""
 
@@ -1090,32 +1142,28 @@ msgstr ""
 msgid "Results per page"
 msgstr ""
 
-#: html/RTIR/GnuPG.html:55
-msgid "Return back to the ticket"
-msgstr ""
-
 #: html/RTIR/EditUsername:53
 msgid "Save"
 msgstr ""
 
-#: html/RTIR/Advanced.html:106 html/RTIR/Edit.html:153
+#: html/RTIR/Advanced.html:110 html/RTIR/Edit.html:159
 msgid "Save Changes"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:124
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:142
 msgid "Scripted Action"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:184
+#: html/RTIR/Tools/ScriptedAction.html:179
 msgid "Scripted Action: Create Incidents and Investigations"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:182
 #. ($incidentid)
+#: html/RTIR/Tools/ScriptedAction.html:177
 msgid "Scripted Action: Create Investigations for Incident #%1"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:75 html/RTIR/Elements/PickRestriction:135 html/RTIR/Link/Articles.html:58 html/RTIR/Tools/Elements/LookupSummary:89
+#: html/RTIR/Elements/PickRestriction:135 html/RTIR/Tools/Elements/LookupSummary:92
 msgid "Search"
 msgstr ""
 
@@ -1123,28 +1171,105 @@ msgstr ""
 msgid "Select recipients"
 msgstr ""
 
-#: etc/initialdata:233 etc/upgrade/2.9.0/content:28
+#: etc/initialdata:196 etc/upgrade/2.1.0/content:94
+msgid "Set IP custom field from message content"
+msgstr ""
+
+#: etc/upgrade/2.1.0/content:98
+msgid "Set and cascade Constituency custom field"
+msgstr ""
+
+#: etc/upgrade/2.1.0/content:102
+msgid "Set group responsible for constituency"
+msgstr ""
+
+#: etc/initialdata:168 etc/upgrade/1.1.1/content:30
+msgid "Set how the Incident Report was reported"
+msgstr ""
+
+#: etc/initialdata:204 etc/upgrade/2.9.0/content:28
 msgid "Set status to first active possible"
 msgstr ""
 
-#: html/RTIR/Elements/ShowDates:73
+#: etc/initialdata:192 etc/upgrade/1.9.0/content:411
+msgid "Set the default resolution of an Incident"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:14
+msgid "Set the due date according to SLA"
+msgstr ""
+
+#: etc/upgrade/1.1.3/content:8
+msgid "Set the due date for a reopened ticket"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:18
+msgid "Set the due date for correspondence"
+msgstr ""
+
+#: etc/initialdata:164 etc/upgrade/1.1.3/content:4
+msgid "Set the due date of parent Incident"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:6
+msgid "Set the due date to the current time"
+msgstr ""
+
+#: etc/upgrade/2.1.1/content:3
+msgid "Set the started date to the current time"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:26
+msgid "Set the starts date according to Business Hours"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:10
+msgid "Set the starts date to the current time"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:58
+msgid "Set the state of a Block"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:62
+msgid "Set the state of an Incident"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:50
+msgid "Set the state of an Incident Report"
+msgstr ""
+
+#: etc/upgrade/1.1.1/content:54
+msgid "Set the state of an Investigation"
+msgstr ""
+
+#: etc/upgrade/2.9.0/content:24
+msgid "Set the status of a Block"
+msgstr ""
+
+#: etc/initialdata:188
+msgid "Set the status of a Countermeasure"
+msgstr ""
+
 #. ($Due)
+#: html/RTIR/Elements/ShowDates:74
 msgid "Set to %1 days from now"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:301 html/Callbacks/RTIR/Elements/Tabs/Privileged:410 html/Callbacks/RTIR/Elements/Tabs/Privileged:84
-msgid "Show Results"
+#. ($Due)
+#: html/RTIR/Elements/ShowDates:76
+msgid "Set to %1 from now"
 msgstr ""
 
-#: html/RTIR/Search/Reporting.html:58
-msgid "Show chart"
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:102 html/Callbacks/RTIR/Elements/Tabs/Privileged:341 html/Callbacks/RTIR/Elements/Tabs/Privileged:448
+msgid "Show Results"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:494
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:532
 msgid "Shredder"
 msgstr ""
 
-#: html/RTIR/Investigation/Elements/Create:155
+#: html/RTIR/Investigation/Elements/Create:181
 msgid "Sign"
 msgstr ""
 
@@ -1156,111 +1281,120 @@ msgstr ""
 msgid "Sort results by"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:195 html/RTIR/Create.html:477 html/RTIR/Incident/Create.html:431
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:213 html/RTIR/Create.html:513 html/RTIR/Incident/Create.html:392
 msgid "Split"
 msgstr ""
 
-#: html/RTIR/Create.html:476
-#. ($name, $SplitObj->id, $SplitObj->Subject)
+#. (RT::IR::TicketType(Lifecycle => $QueueObj->Lifecycle), $SplitObj->id, $SplitObj->Subject)
+#: html/RTIR/Create.html:512
 msgid "Split %1 #%2: %3"
 msgstr ""
 
-#: html/RTIR/Incident/Split.html:63
 #. ($TicketObj->id, $TicketObj->Subject)
+#: html/RTIR/Incident/Split.html:63
 msgid "Split Incident #%1: %2"
 msgstr ""
 
-#: html/RTIR/Create.html:88 html/RTIR/Incident/Create.html:95
+#: html/RTIR/Create.html:88 html/RTIR/Incident/Create.html:98
 msgid "Split from"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:458 html/RTIR/Reporting/index.html:90
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:496 html/RTIR/Reporting/index.html:89
 msgid "Spreadsheet"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:65
+#: html/RTIR/Reporting/index.html:64
 msgid "Start Date:"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:52
+#: html/RTIR/Reporting/Report.html:58
 msgid "Start date"
 msgstr ""
 
-#: html/RTIR/Elements/EditDates:61 html/RTIR/Elements/ShowDates:59
+#: html/RTIR/Elements/ShowDates:59
 msgid "Started"
 msgstr ""
 
-#: html/RTIR/Elements/EditDates:50 html/RTIR/Elements/ShowDates:54 html/RTIR/Investigation/Elements/Create:87
+#: html/RTIR/Elements/ShowDates:54 html/RTIR/Investigation/Elements/Create:100
 msgid "Starts"
 msgstr ""
 
-#: html/RTIR/Display.html:69 html/RTIR/Edit.html:75 html/RTIR/Incident/Create.html:106 html/RTIR/Incident/Display.html:66 html/RTIR/Update.html:79
+#: html/RTIR/Display.html:80 html/RTIR/Edit.html:75 html/RTIR/Incident/Create.html:118 html/RTIR/Incident/Display.html:85 html/RTIR/Update.html:80
 msgid "Status"
 msgstr ""
 
-#: html/RTIR/Incident/BulkAbandon.html:164 html/RTIR/Incident/Reply/index.html:203
+#: html/RTIR/Incident/BulkAbandon.html:165 html/RTIR/Incident/Reply/index.html:213
 msgid "Status of the Incident left unchanged; not all children were updated"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:209
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:227
 msgid "Steal"
 msgstr ""
 
-#: html/RTIR/Advanced.html:59 html/RTIR/Create.html:206 html/RTIR/Edit.html:71 html/RTIR/Elements/PickRestriction:67 html/RTIR/Forward.html:60 html/RTIR/Incident/Create.html:170 html/RTIR/Incident/Display.html:76 html/RTIR/Incident/Elements/ReplyForm:51 html/RTIR/Investigation/Elements/Create:147 html/RTIR/Tools/ScriptedAction.html:150 html/RTIR/Update.html:129
+#: html/RTIR/Search/Reporting.html:104
+msgid "Style"
+msgstr ""
+
+#: html/RTIR/Advanced.html:59 html/RTIR/Create.html:279 html/RTIR/Edit.html:71 html/RTIR/Elements/PickRestriction:67 html/RTIR/Incident/Create.html:170 html/RTIR/Incident/Display.html:95 html/RTIR/Incident/Elements/ReplyForm:51 html/RTIR/Investigation/Elements/Create:173 html/RTIR/Tools/ScriptedAction.html:145 html/RTIR/Update.html:144
 msgid "Subject"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:204
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:222
 msgid "Take"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:113
+#: html/RTIR/Tools/ScriptedAction.html:108
 msgid "Template"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:127
+#: html/RTIR/Tools/ScriptedAction.html:122
 msgid "Test"
 msgstr ""
 
-#: html/RTIR/Tools/ScriptedAction.html:127
+#: html/RTIR/Tools/ScriptedAction.html:122
 msgid "Test email addresses"
 msgstr ""
 
-#: html/RTIR/Reporting/index.html:80
+#: html/RTIR/Reporting/index.html:79
 msgid "Text"
 msgstr ""
 
-#: html/RTIR/Display.html:63 html/RTIR/Edit.html:67
+#: html/RTIR/Display.html:64 html/RTIR/Edit.html:67
 msgid "The Basics"
 msgstr ""
 
-#: etc/initialdata:268 etc/upgrade/2.1.0/content:109
+#: etc/upgrade/2.1.0/content:109
 msgid "The constituency must be changed"
 msgstr ""
 
-#: etc/initialdata:263
+#: etc/initialdata:240 etc/upgrade/1.1.3/content:17
 msgid "The due date of the parent incident must be changed"
 msgstr ""
 
-#: html/RTIR/Create.html:381
+#. ($ticket_type)
+#: html/RTIR/Elements/CreateInRTIRQueueModal:64
+msgid "This will take you to a partially prefilled %1 creation form."
+msgstr ""
+
 #. ($id)
+#: html/RTIR/Create.html:415
 msgid "Ticket #%1 is not an Incident"
 msgstr ""
 
-#: html/RTIR/Incident/BulkAbandon.html:169 html/RTIR/Incident/Display.html:193 html/RTIR/Incident/Reply/index.html:173 html/RTIR/Report/BulkReject.html:144 html/RTIR/Tools/ScriptedAction.html:392
 #. ($Ticket->Id, $_)
 #. ($_->[0], $_->[1])
 #. ($child->Id, $_)
 #. ($id, $_)
+#: html/RTIR/Incident/BulkAbandon.html:170 html/RTIR/Incident/Display.html:232 html/RTIR/Incident/Reply/index.html:178 html/RTIR/Report/BulkReject.html:144 html/RTIR/Tools/ScriptedAction.html:386
 msgid "Ticket %1: %2"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:150
 #. ($id)
+#: html/RTIR/Incident/Reply/index.html:156
 msgid "Ticket %1: Couldn't load ticket."
 msgstr ""
 
-#: html/RTIR/Update.html:64
+#: html/RTIR/Update.html:65
 msgid "Ticket and Transaction"
 msgstr ""
 
@@ -1268,11 +1402,11 @@ msgstr ""
 msgid "Ticket attachment"
 msgstr ""
 
-#: html/RTIR/Display.html:55 html/RTIR/Incident/Display.html:54
+#: html/RTIR/Display.html:56 html/RTIR/Incident/Display.html:55
 msgid "Ticket metadata"
 msgstr ""
 
-#: html/RTIR/Create.html:286
+#: html/RTIR/Create.html:173
 msgid "Time"
 msgstr ""
 
@@ -1280,34 +1414,34 @@ msgstr ""
 msgid "Time Estimated"
 msgstr ""
 
-#: html/RTIR/Advanced.html:82 html/RTIR/Investigation/Elements/Create:72
+#: html/RTIR/Advanced.html:82 html/RTIR/Investigation/Elements/Create:86
 msgid "Time Left"
 msgstr ""
 
-#: html/RTIR/Advanced.html:75 html/RTIR/Display.html:81 html/RTIR/Edit.html:103 html/RTIR/Incident/Display.html:84 html/RTIR/Investigation/Elements/Create:66
+#: html/RTIR/Advanced.html:75 html/RTIR/Display.html:92 html/RTIR/Edit.html:116 html/RTIR/Incident/Display.html:103 html/RTIR/Investigation/Elements/Create:79
 msgid "Time Worked"
 msgstr ""
 
-#: html/RTIR/Report/BulkReject.html:138
 #. ($msg)
+#: html/RTIR/Report/BulkReject.html:138
 msgid "Took ticket. %1"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:121
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:139
 msgid "Tools"
 msgstr ""
 
+#. (RT::IR::TicketType(Lifecycle => $Lifecycle), $children->CountAll)
 #: html/RTIR/Incident/Children/index.html:54
-#. ($Queue, $children->CountAll)
 msgid "Total %1: %2"
 msgstr ""
 
+#. (RT::IR::TicketType(Lifecycle => $Lifecycle), $children->CountAll, $all_children->CountAll)
 #: html/RTIR/Incident/Children/index.html:56
-#. ($Queue, $children->CountAll, $all_children->CountAll)
 msgid "Total %1: %2(%3)"
 msgstr ""
 
-#: html/RTIR/Reporting/Report.html:60
+#: html/RTIR/Reporting/Report.html:66
 msgid "Total new reports for this period"
 msgstr ""
 
@@ -1315,8 +1449,12 @@ msgstr ""
 msgid "Traceroute is not configured properly. Contact system administrator."
 msgstr ""
 
-#: html/RTIR/Tools/Traceroute.html:74
+#: html/RTIR/Tools/Elements/ToolFormTraceroute:49
+msgid "Traceroute to"
+msgstr ""
+
 #. ($q)
+#: html/RTIR/Tools/Traceroute.html:74
 msgid "Traceroute to '%1'"
 msgstr ""
 
@@ -1324,37 +1462,45 @@ msgstr ""
 msgid "Type"
 msgstr ""
 
-#: lib/RT/IR.pm:475
 #. ($server)
+#: lib/RT/IR.pm:658
 msgid "Unable to connect to WHOIS server '%1'"
 msgstr ""
 
-#: html/RTIR/Elements/ShowIncidents:100
+#: html/RTIR/Elements/ShowIncidents:101
 msgid "Unlink"
 msgstr ""
 
-#: html/RTIR/Incident/Children/index.html:73
+#: html/RTIR/Incident/Children/index.html:76
 msgid "Unlink Report"
 msgstr ""
 
-#: html/RTIR/Update.html:153
-#. ($Type, $id, $Ticket->Subject)
+#: etc/upgrade/1.1.1/content:22
+msgid "Unset the due date"
+msgstr ""
+
+#. (RT::IR::TicketType( Ticket => $Ticket ), $id, $Ticket->Subject)
+#: html/RTIR/Update.html:166
 msgid "Update %1 #%2 (%3)"
 msgstr ""
 
-#: html/RTIR/Incident/Reply/index.html:122
+#: html/RTIR/Search/Reporting.html:118
+msgid "Update Chart"
+msgstr ""
+
+#: html/RTIR/Incident/Reply/index.html:120
 msgid "Update Incident"
 msgstr ""
 
-#: html/RTIR/Incident/Elements/ReplyForm:54 html/RTIR/Update.html:67
+#: html/RTIR/Incident/Elements/ReplyForm:54 html/RTIR/Update.html:68
 msgid "Update Type"
 msgstr ""
 
-#: html/RTIR/Search/Elements/BuildQuery:89
+#: html/RTIR/Search/Elements/BuildQuery:94
 msgid "Update format and Search"
 msgstr ""
 
-#: html/RTIR/Elements/ShowDates:78
+#: html/RTIR/Elements/ShowDates:82
 msgid "Updated"
 msgstr ""
 
@@ -1366,53 +1512,61 @@ msgstr ""
 msgid "Username"
 msgstr ""
 
-#: html/RTIR/Incident/Display.html:255
 #. ($id)
+#: html/RTIR/Incident/Display.html:294
 msgid "WARNING: Incident %1 has no children."
 msgstr ""
 
+#: html/RTIR/Tools/Elements/ToolFormWhois:49
+msgid "WHOIS"
+msgstr ""
+
 #: html/RTIR/Report/BulkReject.html:128
 msgid "Warning: already has incident"
 msgstr ""
 
-#: etc/initialdata:288 etc/upgrade/2.9.0/content:16
+#: etc/initialdata:257 etc/upgrade/2.9.0/content:16
 msgid "Whenever it's time to activate report"
 msgstr ""
 
-#: etc/initialdata:278 etc/upgrade/2.1.1/content:15
+#: etc/upgrade/2.1.1/content:15
 msgid "Whenever ticket is linked to incident or created with link"
 msgstr ""
 
-#: etc/initialdata:283 etc/upgrade/2.3.9/content:10
+#: etc/initialdata:252 etc/upgrade/2.3.9/content:10
 msgid "Whenever ticket is merged into another one"
 msgstr ""
 
-#: html/RTIR/Tools/Elements/GetEmailFromIP:72
 #. ($field)
+#: html/RTIR/Tools/Elements/GetEmailFromIP:72
 msgid "Whois server response did not include field '%1'"
 msgstr ""
 
+#: html/RTIR/Search/Reporting.html:105
+msgid "Width"
+msgstr ""
+
 #: html/RTIR/Incident/Elements/ReplyForm:87
 msgid "Worked"
 msgstr ""
 
-#: html/RTIR/Edit.html:57
 #. ($name)
+#: html/RTIR/Edit.html:57
 msgid "You are not allowed to edit this %1."
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:63
 #. ($ChildObj->id)
-msgid "You are not allowed to link with #%2."
+#: html/RTIR/Incident/Create.html:62
+msgid "You are not allowed to link with #%1."
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:59
 #. ($SplitObj->id)
-msgid "You are not allowed to split from #%2."
+#: html/RTIR/Incident/Create.html:58
+msgid "You are not allowed to split from #%1."
 msgstr ""
 
-#: html/RTIR/Create.html:58
-#. ($name)
+#. (RT::IR::TicketType(Lifecycle => $QueueObj->Lifecycle))
+#: html/RTIR/Create.html:57
 msgid "You are not allowed to split this %1."
 msgstr ""
 
@@ -1420,28 +1574,23 @@ msgstr ""
 msgid "You may not reject tickets that belong to another user."
 msgstr ""
 
-#: html/RTIR/Create.html:424
+#: html/RTIR/Create.html:459
 msgid "You must enter a correspondent"
 msgstr ""
 
-#: html/RTIR/Incident/Create.html:367
-msgid "You must enter a correspondent for the investigation"
+#: html/RTIR/Create.html:463
+msgid "You must enter an Incident ID"
 msgstr ""
 
-#: html/RTIR/Create.html:428
-msgid "You must enter an Incident ID"
+#: html/RTIR/Search/Reporting.html:71 html/RTIR/Search/Reporting.html:79 html/RTIR/Search/Reporting.html:94 html/RTIR/Search/Reporting.html:97
+msgid "and then"
 msgstr ""
 
 #: html/RTIR/Elements/PickRestriction:85
 msgid "does not match"
 msgstr ""
 
-#: html/RTIR/Search/Reporting.html:59
-#. ($m->scomp('/Search/Elements/SelectGroupBy', Name => 'PrimaryGroupBy', Query => $FullQuery))
-msgid "grouped by %1"
-msgstr ""
-
-#: html/Callbacks/RTIR/Elements/Tabs/Privileged:484
+#: html/Callbacks/RTIR/Elements/Tabs/Privileged:522
 msgid "iCal"
 msgstr ""
 
@@ -1453,25 +1602,21 @@ msgstr ""
 msgid "isn't"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:149
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:180
 msgid "lookup"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:96
-msgid "Lookup IP"
-msgstr ""
-
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:142 html/Callbacks/RTIR/Elements/MakeClicky/Default:77 html/Callbacks/RTIR/Elements/MakeClicky/Default:88
 #. ($domain)
 #. ($host)
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:169 html/Callbacks/RTIR/Elements/MakeClicky/Default:80 html/Callbacks/RTIR/Elements/MakeClicky/Default:94
 msgid "lookup \"%1\""
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:130
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:153
 msgid "lookup email"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/MakeClicky/Default:156
+#: html/Callbacks/RTIR/Elements/MakeClicky/Default:191
 msgid "lookup host"
 msgstr ""
 
@@ -1479,16 +1624,12 @@ msgstr ""
 msgid "matches"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:83
-msgid "no"
-msgstr ""
-
-#: html/RTIR/Elements/ShowChildren:72
-#. ($Queue)
+#. (RT::IR::FriendlyLifecycle($Lifecycle))
+#: html/RTIR/Elements/ShowChildren:75
 msgid "no %1"
 msgstr ""
 
-#: html/RTIR/Elements/ShowChildren:74
+#: html/RTIR/Elements/ShowChildren:77
 msgid "no children"
 msgstr ""
 
@@ -1500,16 +1641,11 @@ msgstr ""
 msgid "no value"
 msgstr ""
 
-#: html/RTIR/Search/Reporting.html:60
-#. ($m->scomp('/Search/Elements/SelectChartType', Name => 'ChartStyle'))
-msgid "style: %1"
+#: html/RTIR/Search/Reporting.html:105 html/RTIR/Search/Reporting.html:108
+msgid "px"
 msgstr ""
 
 #: html/RTIR/Incident/Elements/ReplyForm:52
 msgid "uses subjects from tickets"
 msgstr ""
 
-#: html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once:80
-msgid "yes"
-msgstr ""
-

commit 1ca060c756d6b5a6e14ebf7c8eac9497af0db27e
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Thu May 26 22:29:11 2016 +0000

    Bump version to 4.0.0rc1

diff --git a/lib/RT/IR.pm b/lib/RT/IR.pm
index 4c25035..8c208f6 100644
--- a/lib/RT/IR.pm
+++ b/lib/RT/IR.pm
@@ -51,7 +51,7 @@ use 5.008003;
 use strict;
 use warnings;
 
-our $VERSION = '3.3.1';
+our $VERSION = '4.0.0rc1';
 
 use Scalar::Util qw(blessed);
 

commit 1d7f16ce0a40f0372f3c5238dd3de7a02a60744a
Author: Shawn M Moore <shawn at bestpractical.com>
Date:   Thu May 26 22:25:18 2016 +0000

    Rebuild distribution metadata and toolchain

diff --git a/MANIFEST b/MANIFEST
index e40e9b7..c92607e 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -47,13 +47,18 @@ etc/upgrade/2.6.2/content
 etc/upgrade/2.9.0/content
 etc/upgrade/3.0.0rc2/content
 etc/upgrade/3.1.0/content
+etc/upgrade/3.3.0/backcompat
 etc/upgrade/3.3.0/content
+etc/upgrade/3.3.1/content
+etc/upgrade/3.3.2/content
+etc/upgrade/3.3.3/content
+etc/upgrade/3.3.4/content
 etc/upgrade/rtir-2.4-upgrade.pl.in
 html/Callbacks/RTIR/autohandler/SuccessfulLogin
 html/Callbacks/RTIR/Elements/Header/Head
 html/Callbacks/RTIR/Elements/MakeClicky/Default
 html/Callbacks/RTIR/Elements/RT__Ticket/ColumnMap/Once
-html/Callbacks/RTIR/Elements/ShowHistory/SkipTransaction
+html/Callbacks/RTIR/Elements/ShowHistoryPage/SkipTransaction
 html/Callbacks/RTIR/Elements/ShowSearch/ModifySearch
 html/Callbacks/RTIR/Elements/Tabs/Privileged
 html/Callbacks/RTIR/Helpers/TicketHistory/ExtraShowHistoryArguments
@@ -64,12 +69,14 @@ html/Callbacks/RTIR/Ticket/Display.html/Initial
 html/RTIR/Advanced.html
 html/RTIR/c/dhandler
 html/RTIR/Create.html
+html/RTIR/CreateInQueue.html
 html/RTIR/Crypt.html
 html/RTIR/Display.html
 html/RTIR/Edit.html
 html/RTIR/EditUsername
 html/RTIR/Elements/AddWatchers
 html/RTIR/Elements/AttachReports
+html/RTIR/Elements/CreateInRTIRQueueModal
 html/RTIR/Elements/CreateTicketInQueue
 html/RTIR/Elements/DueIncidents
 html/RTIR/Elements/EditCustomFields
@@ -98,6 +105,7 @@ html/RTIR/Elements/UpdateData
 html/RTIR/Elements/UserDueIncidents
 html/RTIR/Elements/WorkWithConstituency
 html/RTIR/Forward.html
+html/RTIR/Helpers/CreateInRTIRQueueModal
 html/RTIR/Incident/BulkAbandon.html
 html/RTIR/Incident/Children/index.html
 html/RTIR/Incident/Create.html
@@ -161,7 +169,6 @@ inc/Module/Install/RTx/Runtime.pm
 inc/Module/Install/Substitute.pm
 inc/Module/Install/Win32.pm
 inc/Module/Install/WriteAll.pm
-inc/unicore/Name.pm
 inc/YAML/Tiny.pm
 lib/Net/Whois/RIPE.pm
 lib/Net/Whois/RIPE.pod
@@ -192,6 +199,7 @@ lib/RT/Condition/RTIR_RequireReportActivation.pm
 lib/RT/Condition/RTIR_StaffResponse.pm
 lib/RT/IR.pm
 lib/RT/IR/Config.pm
+lib/RT/IR/ConstituencyManager.pm
 lib/RT/IR/Test.pm.in
 lib/RT/IR/Test/GnuPG.pm
 lib/RT/IR/Test/Web.pm
@@ -206,6 +214,7 @@ README
 static/css/rtir-styles.css
 static/images/RTIR/logo.png
 static/js/jquery.uncheckable-radio-0.1.js
+static/js/rtir.js
 t/000-mason-syntax.t
 t/001-basic-RTIR.t
 t/002-test-reject.t
@@ -223,11 +232,7 @@ t/articles/basics.t
 t/articles/on-create.t
 t/articles/on-update.t
 t/constituency/basics.t
-t/constituency/email.t
-t/constituency/email_outgoing.t
-t/constituency/propagation-inherit.t
-t/constituency/propagation-no.t
-t/constituency/propagation-reject.t
+t/constituency/modal.t
 t/countermeasure/pending-no-regexp.t
 t/countermeasure/pending-regexp.t
 t/countermeasure/status-basics.t
@@ -265,5 +270,5 @@ t/searches/cf.t
 t/searches/menu.t
 t/searches/simple.t
 t/tools/lookup.t
-t/upgrade/2.6.0-to-2.9.0.t
+t/upgrade/2.6.0-to-current.t
 t/walk-web.t
diff --git a/META.yml b/META.yml
index 2c4f28f..57f36d1 100644
--- a/META.yml
+++ b/META.yml
@@ -11,7 +11,7 @@ configure_requires:
   ExtUtils::MakeMaker: 6.59
 distribution_type: module
 dynamic_config: 1
-generated_by: 'Module::Install version 1.12'
+generated_by: 'Module::Install version 1.16'
 license: gpl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -32,7 +32,7 @@ requires:
   perl: 5.10.1
 resources:
   license: http://opensource.org/licenses/gpl-license.php
-version: 3.3.HEAD
-x_module_install_rtx_version: '0.36'
-x_requires_rt: 4.2.9
-x_rt_too_new: 4.4.0
+version: 4.0.0rc1
+x_module_install_rtx_version: '0.37'
+x_requires_rt: 4.4.0
+x_rt_too_new: 4.6.0
diff --git a/inc/Module/AutoInstall.pm b/inc/Module/AutoInstall.pm
index 4aca606..22dfa82 100644
--- a/inc/Module/AutoInstall.pm
+++ b/inc/Module/AutoInstall.pm
@@ -8,7 +8,7 @@ use ExtUtils::MakeMaker ();
 
 use vars qw{$VERSION};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 }
 
 # special map on pre-defined feature sets
@@ -537,7 +537,7 @@ sub _install_cpan {
     while ( my ( $opt, $arg ) = splice( @config, 0, 2 ) ) {
         ( $args{$opt} = $arg, next )
           if $opt =~ /^(?:force|notest)$/;    # pseudo-option
-        $CPAN::Config->{$opt} = $arg;
+        $CPAN::Config->{$opt} = $opt eq 'urllist' ? [$arg] : $arg;
     }
 
     if ($args{notest} && (not CPAN::Shell->can('notest'))) {
diff --git a/inc/Module/Install.pm b/inc/Module/Install.pm
index 5460dd5..f44ab4d 100644
--- a/inc/Module/Install.pm
+++ b/inc/Module/Install.pm
@@ -31,7 +31,7 @@ BEGIN {
 	# This is not enforced yet, but will be some time in the next few
 	# releases once we can make sure it won't clash with custom
 	# Module::Install extensions.
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 
 	# Storage for the pseudo-singleton
 	$MAIN    = undef;
@@ -378,6 +378,7 @@ eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@;
 sub _read {
 	local *FH;
 	open( FH, '<', $_[0] ) or die "open($_[0]): $!";
+	binmode FH;
 	my $string = do { local $/; <FH> };
 	close FH or die "close($_[0]): $!";
 	return $string;
@@ -386,6 +387,7 @@ END_NEW
 sub _read {
 	local *FH;
 	open( FH, "< $_[0]"  ) or die "open($_[0]): $!";
+	binmode FH;
 	my $string = do { local $/; <FH> };
 	close FH or die "close($_[0]): $!";
 	return $string;
@@ -416,6 +418,7 @@ eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@;
 sub _write {
 	local *FH;
 	open( FH, '>', $_[0] ) or die "open($_[0]): $!";
+	binmode FH;
 	foreach ( 1 .. $#_ ) {
 		print FH $_[$_] or die "print($_[0]): $!";
 	}
@@ -425,6 +428,7 @@ END_NEW
 sub _write {
 	local *FH;
 	open( FH, "> $_[0]"  ) or die "open($_[0]): $!";
+	binmode FH;
 	foreach ( 1 .. $#_ ) {
 		print FH $_[$_] or die "print($_[0]): $!";
 	}
diff --git a/inc/Module/Install/AutoInstall.pm b/inc/Module/Install/AutoInstall.pm
index ab1e5fa..e19d259 100644
--- a/inc/Module/Install/AutoInstall.pm
+++ b/inc/Module/Install/AutoInstall.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Base.pm b/inc/Module/Install/Base.pm
index f9bf5de..5762a74 100644
--- a/inc/Module/Install/Base.pm
+++ b/inc/Module/Install/Base.pm
@@ -4,7 +4,7 @@ package Module::Install::Base;
 use strict 'vars';
 use vars qw{$VERSION};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 }
 
 # Suspend handler for "redefined" warnings
diff --git a/inc/Module/Install/Can.pm b/inc/Module/Install/Can.pm
index b4e5e3b..d859276 100644
--- a/inc/Module/Install/Can.pm
+++ b/inc/Module/Install/Can.pm
@@ -8,7 +8,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Fetch.pm b/inc/Module/Install/Fetch.pm
index 54f14fb..41d3517 100644
--- a/inc/Module/Install/Fetch.pm
+++ b/inc/Module/Install/Fetch.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Include.pm b/inc/Module/Install/Include.pm
index 7224cff..2eb1d1f 100644
--- a/inc/Module/Install/Include.pm
+++ b/inc/Module/Install/Include.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Makefile.pm b/inc/Module/Install/Makefile.pm
index 81cddd5..e9918d2 100644
--- a/inc/Module/Install/Makefile.pm
+++ b/inc/Module/Install/Makefile.pm
@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/Metadata.pm b/inc/Module/Install/Metadata.pm
index 2c66b1e..9792685 100644
--- a/inc/Module/Install/Metadata.pm
+++ b/inc/Module/Install/Metadata.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/RTx.pm b/inc/Module/Install/RTx.pm
index 1b55bfa..97acf77 100644
--- a/inc/Module/Install/RTx.pm
+++ b/inc/Module/Install/RTx.pm
@@ -8,7 +8,7 @@ no warnings 'once';
 
 use Module::Install::Base;
 use base 'Module::Install::Base';
-our $VERSION = '0.36';
+our $VERSION = '0.37';
 
 use FindBin;
 use File::Glob     ();
diff --git a/inc/Module/Install/Win32.pm b/inc/Module/Install/Win32.pm
index e48c32d..218a66b 100644
--- a/inc/Module/Install/Win32.pm
+++ b/inc/Module/Install/Win32.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = 'Module::Install::Base';
 	$ISCORE  = 1;
 }
diff --git a/inc/Module/Install/WriteAll.pm b/inc/Module/Install/WriteAll.pm
index 409ef40..530749b 100644
--- a/inc/Module/Install/WriteAll.pm
+++ b/inc/Module/Install/WriteAll.pm
@@ -6,7 +6,7 @@ use Module::Install::Base ();
 
 use vars qw{$VERSION @ISA $ISCORE};
 BEGIN {
-	$VERSION = '1.12';
+	$VERSION = '1.16';
 	@ISA     = qw{Module::Install::Base};
 	$ISCORE  = 1;
 }
diff --git a/inc/YAML/Tiny.pm b/inc/YAML/Tiny.pm
index 1be0cb1..aa539f7 100644
--- a/inc/YAML/Tiny.pm
+++ b/inc/YAML/Tiny.pm
@@ -2,16 +2,12 @@
 use 5.008001; # sane UTF-8 support
 use strict;
 use warnings;
-package YAML::Tiny;
-BEGIN {
-  $YAML::Tiny::AUTHORITY = 'cpan:ADAMK';
-}
-# git description: v1.61-3-g0a82466
-$YAML::Tiny::VERSION = '1.62';
+package YAML::Tiny; # git description: v1.68-2-gcc5324e
 # XXX-INGY is 5.8.1 too old/broken for utf8?
 # XXX-XDG Lancaster consensus was that it was sufficient until
 # proven otherwise
 
+our $VERSION = '1.69';
 
 #####################################################################
 # The YAML::Tiny API.
@@ -300,10 +296,11 @@ Did you decode with lax ":utf8" instead of strict ":encoding(UTF-8)"?
             }
         }
     };
-    if ( ref $@ eq 'SCALAR' ) {
-        $self->_error(${$@});
-    } elsif ( $@ ) {
-        $self->_error($@);
+    my $err = $@;
+    if ( ref $err eq 'SCALAR' ) {
+        $self->_error(${$err});
+    } elsif ( $err ) {
+        $self->_error($err);
     }
 
     return $self;
@@ -515,6 +512,10 @@ sub _load_hash {
             die \"YAML::Tiny failed to classify line '$lines->[0]'";
         }
 
+        if ( exists $hash->{$key} ) {
+            warn "YAML::Tiny found a duplicate key '$key' in line '$lines->[0]'";
+        }
+
         # Do we have a value?
         if ( length $lines->[0] ) {
             # Yes
@@ -828,9 +829,10 @@ sub _can_flock {
 #####################################################################
 # Use Scalar::Util if possible, otherwise emulate it
 
+use Scalar::Util ();
 BEGIN {
     local $@;
-    if ( eval { require Scalar::Util; Scalar::Util->VERSION(1.18); } ) {
+    if ( eval { Scalar::Util->VERSION(1.18); } ) {
         *refaddr = *Scalar::Util::refaddr;
     }
     else {
@@ -852,8 +854,7 @@ END_PERL
     }
 }
 
-
-
+delete $YAML::Tiny::{refaddr};
 
 1;
 
@@ -870,4 +871,4 @@ END_PERL
 
 __END__
 
-#line 1488
+#line 1489
diff --git a/inc/unicore/Name.pm b/inc/unicore/Name.pm
deleted file mode 100644
index d72eb6e..0000000
--- a/inc/unicore/Name.pm
+++ /dev/null
@@ -1,417 +0,0 @@
-#line 1
-# !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
-# This file is machine-generated by lib/unicore/mktables from the Unicode
-# database, Version 6.3.0.  Any changes made here will be lost!
-
-
-# !!!!!!!   INTERNAL PERL USE ONLY   !!!!!!!
-# This file is for internal use by core Perl only.  The format and even the
-# name or existence of this file are subject to change without notice.  Don't
-# use it directly.  Use Unicode::UCD to access the Unicode character data
-# base.
-
-
-package charnames;
-
-# This module contains machine-generated tables and code for the
-# algorithmically-determinable Unicode character names.  The following
-# routines can be used to translate between name and code point and vice versa
-
-{ # Closure
-
-    # Matches legal code point.  4-6 hex numbers, If there are 6, the first
-    # two must be 10; if there are 5, the first must not be a 0.  Written this
-    # way to decrease backtracking.  The first regex allows the code point to
-    # be at the end of a word, but to work properly, the word shouldn't end
-    # with a valid hex character.  The second one won't match a code point at
-    # the end of a word, and doesn't have the run-on issue
-    my $run_on_code_point_re = qr/(?^aax: (?: 10[0-9A-F]{4} | [1-9A-F][0-9A-F]{4} | [0-9A-F]{4} ) \b)/;
-    my $code_point_re = qr/(?^aa:\b(?^aax: (?: 10[0-9A-F]{4} | [1-9A-F][0-9A-F]{4} | [0-9A-F]{4} ) \b))/;
-
-    # In the following hash, the keys are the bases of names which include
-    # the code point in the name, like CJK UNIFIED IDEOGRAPH-4E01.  The value
-    # of each key is another hash which is used to get the low and high ends
-    # for each range of code points that apply to the name.
-    my %names_ending_in_code_point = (
-'CJK COMPATIBILITY IDEOGRAPH' => 
-{
-'high' => 
-[
-64109,
-64217,
-195101,
-],
-'low' => 
-[
-63744,
-64112,
-194560,
-],
-},
-'CJK UNIFIED IDEOGRAPH' => 
-{
-'high' => 
-[
-19893,
-40908,
-173782,
-177972,
-178205,
-],
-'low' => 
-[
-13312,
-19968,
-131072,
-173824,
-177984,
-],
-},
-
-    );
-
-    # The following hash is a copy of the previous one, except is for loose
-    # matching, so each name has blanks and dashes squeezed out
-    my %loose_names_ending_in_code_point = (
-'CJKCOMPATIBILITYIDEOGRAPH' => 
-{
-'high' => 
-[
-64109,
-64217,
-195101,
-],
-'low' => 
-[
-63744,
-64112,
-194560,
-],
-},
-'CJKUNIFIEDIDEOGRAPH' => 
-{
-'high' => 
-[
-19893,
-40908,
-173782,
-177972,
-178205,
-],
-'low' => 
-[
-13312,
-19968,
-131072,
-173824,
-177984,
-],
-},
-
-    );
-
-    # And the following array gives the inverse mapping from code points to
-    # names.  Lowest code points are first
-    my @code_points_ending_in_code_point = (
-
-{
-'high' => 19893,
-'low' => 13312,
-'name' => 'CJK UNIFIED IDEOGRAPH',
-},
-{
-'high' => 40908,
-'low' => 19968,
-'name' => 'CJK UNIFIED IDEOGRAPH',
-},
-{
-'high' => 64109,
-'low' => 63744,
-'name' => 'CJK COMPATIBILITY IDEOGRAPH',
-},
-{
-'high' => 64217,
-'low' => 64112,
-'name' => 'CJK COMPATIBILITY IDEOGRAPH',
-},
-{
-'high' => 173782,
-'low' => 131072,
-'name' => 'CJK UNIFIED IDEOGRAPH',
-},
-{
-'high' => 177972,
-'low' => 173824,
-'name' => 'CJK UNIFIED IDEOGRAPH',
-},
-{
-'high' => 178205,
-'low' => 177984,
-'name' => 'CJK UNIFIED IDEOGRAPH',
-},
-{
-'high' => 195101,
-'low' => 194560,
-'name' => 'CJK COMPATIBILITY IDEOGRAPH',
-},
-,
-
-    );
-
-    # Convert from code point to Jamo short name for use in composing Hangul
-    # syllable names
-    my %Jamo = (
-4352 => 'G',
-4353 => 'GG',
-4354 => 'N',
-4355 => 'D',
-4356 => 'DD',
-4357 => 'R',
-4358 => 'M',
-4359 => 'B',
-4360 => 'BB',
-4361 => 'S',
-4362 => 'SS',
-4363 => '',
-4364 => 'J',
-4365 => 'JJ',
-4366 => 'C',
-4367 => 'K',
-4368 => 'T',
-4369 => 'P',
-4370 => 'H',
-4449 => 'A',
-4450 => 'AE',
-4451 => 'YA',
-4452 => 'YAE',
-4453 => 'EO',
-4454 => 'E',
-4455 => 'YEO',
-4456 => 'YE',
-4457 => 'O',
-4458 => 'WA',
-4459 => 'WAE',
-4460 => 'OE',
-4461 => 'YO',
-4462 => 'U',
-4463 => 'WEO',
-4464 => 'WE',
-4465 => 'WI',
-4466 => 'YU',
-4467 => 'EU',
-4468 => 'YI',
-4469 => 'I',
-4520 => 'G',
-4521 => 'GG',
-4522 => 'GS',
-4523 => 'N',
-4524 => 'NJ',
-4525 => 'NH',
-4526 => 'D',
-4527 => 'L',
-4528 => 'LG',
-4529 => 'LM',
-4530 => 'LB',
-4531 => 'LS',
-4532 => 'LT',
-4533 => 'LP',
-4534 => 'LH',
-4535 => 'M',
-4536 => 'B',
-4537 => 'BS',
-4538 => 'S',
-4539 => 'SS',
-4540 => 'NG',
-4541 => 'J',
-4542 => 'C',
-4543 => 'K',
-4544 => 'T',
-4545 => 'P',
-4546 => 'H',
-
-    );
-
-    # Leading consonant (can be null)
-    my %Jamo_L = (
-'' => 11,
-'B' => 7,
-'BB' => 8,
-'C' => 14,
-'D' => 3,
-'DD' => 4,
-'G' => 0,
-'GG' => 1,
-'H' => 18,
-'J' => 12,
-'JJ' => 13,
-'K' => 15,
-'M' => 6,
-'N' => 2,
-'P' => 17,
-'R' => 5,
-'S' => 9,
-'SS' => 10,
-'T' => 16,
-
-    );
-
-    # Vowel
-    my %Jamo_V = (
-'A' => 0,
-'AE' => 1,
-'E' => 5,
-'EO' => 4,
-'EU' => 18,
-'I' => 20,
-'O' => 8,
-'OE' => 11,
-'U' => 13,
-'WA' => 9,
-'WAE' => 10,
-'WE' => 15,
-'WEO' => 14,
-'WI' => 16,
-'YA' => 2,
-'YAE' => 3,
-'YE' => 7,
-'YEO' => 6,
-'YI' => 19,
-'YO' => 12,
-'YU' => 17,
-
-    );
-
-    # Optional trailing consonant
-    my %Jamo_T = (
-'B' => 17,
-'BS' => 18,
-'C' => 23,
-'D' => 7,
-'G' => 1,
-'GG' => 2,
-'GS' => 3,
-'H' => 27,
-'J' => 22,
-'K' => 24,
-'L' => 8,
-'LB' => 11,
-'LG' => 9,
-'LH' => 15,
-'LM' => 10,
-'LP' => 14,
-'LS' => 12,
-'LT' => 13,
-'M' => 16,
-'N' => 4,
-'NG' => 21,
-'NH' => 6,
-'NJ' => 5,
-'P' => 26,
-'S' => 19,
-'SS' => 20,
-'T' => 25,
-
-    );
-
-    # Computed re that splits up a Hangul name into LVT or LV syllables
-    my $syllable_re = qr/(|B|BB|C|D|DD|G|GG|H|J|JJ|K|M|N|P|R|S|SS|T)(A|AE|E|EO|EU|I|O|OE|U|WA|WAE|WE|WEO|WI|YA|YAE|YE|YEO|YI|YO|YU)(B|BS|C|D|G|GG|GS|H|J|K|L|LB|LG|LH|LM|LP|LS|LT|M|N|NG|NH|NJ|P|S|SS|T)?/;
-
-    my $HANGUL_SYLLABLE = "HANGUL SYLLABLE ";
-    my $loose_HANGUL_SYLLABLE = "HANGULSYLLABLE";
-
-    # These constants names and values were taken from the Unicode standard,
-    # version 5.1, section 3.12.  They are used in conjunction with Hangul
-    # syllables
-    my $SBase = 0xAC00;
-    my $LBase = 0x1100;
-    my $VBase = 0x1161;
-    my $TBase = 0x11A7;
-    my $SCount = 11172;
-    my $LCount = 19;
-    my $VCount = 21;
-    my $TCount = 28;
-    my $NCount = $VCount * $TCount;
-
-    sub name_to_code_point_special {
-        my ($name, $loose) = @_;
-
-        # Returns undef if not one of the specially handled names; otherwise
-        # returns the code point equivalent to the input name
-        # $loose is non-zero if to use loose matching, 'name' in that case
-        # must be input as upper case with all blanks and dashes squeezed out.
-
-        if ((! $loose && $name =~ s/$HANGUL_SYLLABLE//)
-            || ($loose && $name =~ s/$loose_HANGUL_SYLLABLE//))
-        {
-            return if $name !~ qr/^$syllable_re$/;
-            my $L = $Jamo_L{$1};
-            my $V = $Jamo_V{$2};
-            my $T = (defined $3) ? $Jamo_T{$3} : 0;
-            return ($L * $VCount + $V) * $TCount + $T + $SBase;
-        }
-
-        # Name must end in 'code_point' for this to handle.
-        return if (($loose && $name !~ /^ (.*?) ($run_on_code_point_re) $/x)
-                   || (! $loose && $name !~ /^ (.*) ($code_point_re) $/x));
-
-        my $base = $1;
-        my $code_point = CORE::hex $2;
-        my $names_ref;
-
-        if ($loose) {
-            $names_ref = \%loose_names_ending_in_code_point;
-        }
-        else {
-            return if $base !~ s/-$//;
-            $names_ref = \%names_ending_in_code_point;
-        }
-
-        # Name must be one of the ones which has the code point in it.
-        return if ! $names_ref->{$base};
-
-        # Look through the list of ranges that apply to this name to see if
-        # the code point is in one of them.
-        for (my $i = 0; $i < scalar @{$names_ref->{$base}{'low'}}; $i++) {
-            return if $names_ref->{$base}{'low'}->[$i] > $code_point;
-            next if $names_ref->{$base}{'high'}->[$i] < $code_point;
-
-            # Here, the code point is in the range.
-            return $code_point;
-        }
-
-        # Here, looked like the name had a code point number in it, but
-        # did not match one of the valid ones.
-        return;
-    }
-
-    sub code_point_to_name_special {
-        my $code_point = shift;
-
-        # Returns the name of a code point if algorithmically determinable;
-        # undef if not
-
-        # If in the Hangul range, calculate the name based on Unicode's
-        # algorithm
-        if ($code_point >= $SBase && $code_point <= $SBase + $SCount -1) {
-            use integer;
-            my $SIndex = $code_point - $SBase;
-            my $L = $LBase + $SIndex / $NCount;
-            my $V = $VBase + ($SIndex % $NCount) / $TCount;
-            my $T = $TBase + $SIndex % $TCount;
-            $name = "$HANGUL_SYLLABLE$Jamo{$L}$Jamo{$V}";
-            $name .= $Jamo{$T} if $T != $TBase;
-            return $name;
-        }
-
-        # Look through list of these code points for one in range.
-        foreach my $hash (@code_points_ending_in_code_point) {
-            return if $code_point < $hash->{'low'};
-            if ($code_point <= $hash->{'high'}) {
-                return sprintf("%s-%04X", $hash->{'name'}, $code_point);
-            }
-        }
-        return;            # None found
-    }
-} # End closure
-
-1;

-----------------------------------------------------------------------


More information about the rt-commit mailing list